#include #include #include using namespace std;
/*解題思路:
給定房間燈光現狀矩陣matrix,令操作矩陣press全取0;
不管第一行的燈光矩陣是怎麼樣的,第二行的press都有辦法把第一行的燈光全部熄滅;
依次類推,第i行的press總有辦法把第i-1行的燈光全部熄滅;
因此,只要第一行的press取值定下來,一定有辦法讓第1到第4行的燈光全部熄滅;
然後考慮第5行,此時已經沒有辦法通過press改變第5行的燈光;
因此,第5行燈光在第5行的使得第4行燈光全部熄滅的press操作下,必須恰好全部熄滅;
因此思路是,列舉第一行的press,找出恰好實現第5行全部熄滅的那個press;
*/int matrix[6][8];
int press[6][8];
int casenum;
bool guess()}/*
第5行的press操作使得第4行的matrix狀態值全部為0;
判斷此時第5行的matrix值是否為0;
由於之前的操作不對matrix矩陣進行修改;
因此直接判斷press操作加總是否使得對應的matrix值取為0;
如果初始狀態1,press加總%2為1,則恢復為0;
如果初始狀態0,press加總%2為0,則恢復為0;
否則為1;
總結,若(初始狀態+press加總%2)%2為0,則成功熄滅;
否則未成功熄滅;
*/for(int i=1;i<=6;i++)
return true;
}void enumerate()
while(guess()==false)
}//否則,第一行的設定能夠得出解
return;
}int main()
}enumerate();//運算
cout<<"puzzle #"
for(int i=1;i<=5;i++)
cout<}
}return 0;
}
2811 熄燈問題(列舉)
描述有乙個由按鈕組成的矩陣,其中每行有6個按鈕,共5行。每個按鈕的位置上有一盞燈。當按下乙個按鈕後,該按鈕以及周圍位置 上邊 下邊 左邊 右邊 的燈都會改變一次。即,如果燈原來是點亮的,就會被熄滅 如果燈原來是熄滅的,則會被點亮。在矩陣角上的按鈕改變3盞燈的狀態 在矩陣邊上的按鈕改變4盞燈的狀態 其...
POJ2811熄燈問題
題目描述 事實上,只用列舉第一行或者第一列按鈕的狀態即可。下面以列舉第一行按鈕的狀態為例。因為第一行燈的狀態由第一行和第二行的按鈕決定,所以第一行按鈕的狀態確定之後,為是第一行的燈全部熄滅,第二行按鈕的狀態也就唯一確定了。例如,當第一行按鈕的狀態確定之後 因此,在第一行按鈕的狀態確定之後,第二行按鈕...
POJ 2811 熄燈問題 列舉
總時間限制 1000ms 記憶體限制 65536kb 描述 有乙個由按鈕組成的矩陣,其中每行有6個按鈕,共5行。每個按鈕的位置上有一盞燈。當按下乙個按鈕後,該按鈕以及周圍位置 上邊 下邊 左邊 右邊 的燈都會改變一次。即,如果燈原來是點亮的,就會被熄滅 如果燈原來是熄滅的,則會被點亮。在矩陣角上的按...