思路:列舉第一行。從第二行開始,如果上邊一行的等還是開的,就按這個開關,直到最後一行。檢查等是否全滅掉了,若是就輸出按開關的方案。
(位運算用的不習慣,就直接用陣列了)
#include
#include
using
namespace std;
const
int n =10;
int t, light[n]
[n], cnt;
int a[n]
[n], state =(1
<<6)
-1, op[n]
[n];
//這個燈取反
void
flip
(int i,
int j)
//改變周圍燈的狀態
void
change
(int i,
int j)
//檢查是否全滅掉了
bool
check()
void
print()
}int
main()
//檢查上一行的燈是否滅掉
for(
int i =
2;i <=5;
++ i)}if
(check()
)}}}
POJ熄燈問題(列舉法)
題目 有乙個由按鈕組成的矩陣,其中每行有6個按鈕,共5行。每個按鈕的位置上有一盞燈。當按下乙個按鈕後,該按鈕以及周圍位置 上邊 下邊 左邊 右邊 的燈都會改變一次。即,如果燈原來是點亮的,就會被熄滅 如果燈原來是熄滅的,則會被點亮。在矩陣角上的按鈕改變3盞燈的狀態 在矩陣邊上的按鈕改變4盞燈的狀態 ...
POJ1222熄燈問題
問題描述 程式 思路1 列舉所有可能的開關狀態,對每個狀態計算下最後燈的情況,看是否都熄滅 每種按鈕有兩種狀態,一共有30個開關,那麼狀態數是2的30次方,太多不可取 思路2 如何減少列舉的數目呢?如果存在某個區域性,一旦這個區域性狀態被確定後,那麼剩餘其他部分的狀態只能 是確定的一種或者不多的n種...
POJ2811熄燈問題
題目描述 事實上,只用列舉第一行或者第一列按鈕的狀態即可。下面以列舉第一行按鈕的狀態為例。因為第一行燈的狀態由第一行和第二行的按鈕決定,所以第一行按鈕的狀態確定之後,為是第一行的燈全部熄滅,第二行按鈕的狀態也就唯一確定了。例如,當第一行按鈕的狀態確定之後 因此,在第一行按鈕的狀態確定之後,第二行按鈕...