題型:列舉
題意:
4*4的棋盤上面放了16盞燈,有黑有亮。每次按乙個燈,會改變本身及其上下左右四個燈的狀態,即黑變白或白變黑,問最少需要按幾次,可以將所有燈變為同一種狀態,不能變則輸出「impossible」。
分析:
如果按個多個燈,可以發現,這些操作的順序是互不影響的。對於每個燈,按一次翻轉,再按一次還原,所以可以發現,每個燈最多按一次足矣。
採用二進位制列舉,01串代表按下多少個燈及每個燈的位置,然後轉換為操作後的狀態並檢查是否滿足全部同一種狀態。複雜度(2^16) * 16
**:
#include#include#include#includeusing namespace std;
const int inf = 0x3f3f3f3f;
char str[6][6];
int lamp[6][6];
int dir1 = ;
int dir2 = ;
void copy() else }}
}bool check(int x,int y)
bool judge()
}if(num0==16 || num1==16) return true;
return false;
}int main() {
while(~scanf("%s",str[0])) {
scanf("%s",str[1]);
scanf("%s",str[2]);
scanf("%s",str[3]);
int ans = inf;
int step;
int all = (1<<16);
for(int i=0; i
POJ1753 flip Game翻轉棋盤
題目大意 有乙個4 4的方格,每個方格中放一粒棋子,這個棋子一面是白色,一面是黑色。遊戲規則為每次任選16顆中的一顆,把選中的這顆以及它四周的棋子一併反過來,當所有的棋子都是同乙個顏色朝上時,遊戲就完成了。現在給定乙個初始狀態,要求輸出能夠完成遊戲所需翻轉的最小次數,如果初始狀態已經達到要求輸出0。...
poj 1753 Flip Game 高斯消元
因為目標狀態是全白或全黑,所以進行兩次高斯消元,每次若有自由變元的話要列舉自由變元求得最優解。哇哦,怎麼就寫了200 行。include include include include include include include include include include include i...
poj1753Flip Game 基本演算法之列舉
題意 有4 4的矩陣,每個方格都有乙個兩色黑白的棋子,每個棋子都可以任意翻轉,一次翻轉操作 上下左右以及自己本身5個棋子發生取反。問要將整個棋盤都置為全白或者全黑,至少要翻轉幾次。思路 資料範圍非常小,總共16顆棋子,每種棋子都有2中操作,翻與不翻 注意這個翻轉操作的執行順序對棋盤沒有影響 那麼總共...