熄燈問題(百練2811)

2021-07-04 02:40:36 字數 1072 閱讀 3896

#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行。每個按鈕的位置上有一盞燈。當按下乙個按鈕後,該按鈕以及周圍位置 上邊 下邊 左邊 右邊 的燈都會改變一次。即,如果燈原來是點亮的,就會被熄滅 如果燈原來是熄滅的,則會被點亮。在矩陣角上的按...