POJ3279反轉 位運算

2021-08-15 06:09:38 字數 1083 閱讀 8116

題意:要用最少的步驟將題目所給的矩陣中的所有1都變為0,已知每次反轉乙個點時,其周圍與其有公共邊的格仔都會反轉。

做法:有條理的做,想要全部反轉,首先要從區域性開始,例如,先把第一行全部變為0,若第一行有n列,那麼相應的對第一行的操作一共就有2^n種,每一種方法不一定都能將第一行全部置為0,更有可能沒有一種方法將第一行置為0,假定隨便選一種方法作用於第一行,因為反轉乙個點會使其上下左右都反轉,若第一行仍有某個點為1,那麼下一行與其對應著同一列的那個點就必須反轉(不管其原來是1還是0),從而使得第一行全部變為0,這也從而得到了下一行的反轉方案,依次類推,直到做完最後一行的方案。此時若最後一行還有1,則說明此種方案不可行,否則,則成功。

#include 

#include

#include

#include

using

namespace

std;

int m,n;

int cur[20];

int tmp[20];

int getbit(int x, int i)

void flip(int& x,int i)

int main()

int ans[20]; //當前的方案

int res[20];//最終的方案

int mintc = 1

<<30;

bool flag = false; int tc = 0;

for(int i = 0; i < (1

memcpy(tmp,cur,sizeof(cur));

tc = 0; // 記錄反轉次數

for(int j = 0; j < m; ++j)

}if(j < m-1)

tmp[j+1] ^= ans[j];//同時反轉下一行的

}if(tmp[m-1] == 0)}}

if(flag)

for(int i = 0; i < m; ++i)

printf("\n");

}else

printf("impossible\n");

return

0;}

POJ 3279 搜尋(反轉)

這道題搜尋的角度很有意思。比較直白的想就是每個瓷磚都可以反或不反,2種選擇。這樣的話,搜尋的狀態數時間太多,指數級增長,肯定t。不妨這麼想。如果指定了第1橫排的翻法。那麼如果第1橫排存在黑色,也就是 1,x 為黑。那麼 2,x 就必須反轉才能保證 1,x 為白,那麼第2排的反轉法也確定了。如此類推,...

POJ3279 開關後續

描述 乙個n m 的矩陣,每個格仔 有0和1 兩種狀態 每次可 以翻乙個 格仔,並 且此格仔 的上下左 右都要被 翻。n m的矩陣,每個格仔有0和1兩種狀態.每次可以翻乙個格仔,並且此格仔的上下左右都要被翻。n m的矩陣 每個格 子有0和 1兩種狀 態.每次 可以翻一 個格仔,並且此格 子的上下 左...

poj3279 (搜尋,好題 )

前題 這題是之前 做鄺斌搜尋專題遺留下的三題之一,最近為了複習搜尋姿勢補上。題意 最大15 15平面 二維陣列 有1有0,對乙個地方操作,與他相鄰四個包括他自己會翻轉 0變1,1變0 求出最少的操作讓全部變成0,輸出操作位置圖。思路 很明顯每個點操作一次就夠了,兩次恢復原樣,然後 我就想不到了.15...