問題描述:
程式**:
/*
*思路1:列舉所有可能的開關狀態,對每個狀態計算下最後燈的情況,看是否都熄滅
* 每種按鈕有兩種狀態,一共有30個開關,那麼狀態數是2的30次方,太多不可取
*思路2:如何減少列舉的數目呢?
如果存在某個區域性,一旦這個區域性狀態被確定後,那麼剩餘其他部分的狀態只能
是確定的一種或者不多的n種,那麼只需要列舉這個區域性狀態即可
*/#include #include #include #include using namespace std;
/* *因為開關的狀態只有0和1,並且每一行有六位,所以可以用乙個char型別的字元來表示每一行的狀態
*所以所有的狀態可以用乙個一維的字元陣列來表示,通過對字元進行位運算來操作
*/char orilights[5];//儲存初始燈的狀態
char lights[5];//儲存變化中燈的狀態
char result[5];//儲存燈的結果狀態
int getbit(char c,int i)//獲取字元c的第i位
void setbit(char & c,int i,int v)//把字元c的第i為設定為v
//開始列舉第一行的所有狀態
for(int n = 0; n<64;++n)
}if( i < 5)//開始處理i+1行的燈
switchs = lights[i];//把下一行的狀態賦給switchs
}if(lights[4]==0)}}
return 0;
}
結果已經在poj上面執行通 POJ 2811 熄燈問題 POJ 1222
樣例輸入 輸出後面有 區域性即整體思想 雖然整體情況看起來巨多,眼花繚亂,但有時候問題的一小部分,其實對應了所有的結果,因為所有的結果都是從這一區域性出發生長出來的 雞湯 細節決定成敗,丟了馬蹄鐵導致戰爭失敗 本題 第一行就是這樣的 區域性 任意給出乙個第一行的按開關方案,後面所有行,要想成功,一定...
POJ 1222 開關問題
題意 傳送門 poj 1222 題解列舉第一行的開關是否翻轉的狀態,此時決定 l0j l l0 j 的狀態的只有 l1j l l1 j 乙個開關,依次類推可以求出所有的開關翻轉狀態。對於列舉的每乙個狀態,判斷最後一行是否全零即可判斷該方案是否可行。include include include in...
poj1222 熄燈問題 列舉(二進位制)
題目大意 有5 6的乙個方格,裡頭有幾個電燈泡子,你給乙個電燈泡子關了或者開了,它上下左右的電燈泡子都會變到相反狀態 包括自己 現在問了,按哪幾個開關能讓電燈泡子全部關閉,對就是這個意思,輸出你所按得開關的矩陣,就完事了。思路 那麼廢話少說,讓我們直插主題,怎麼做,首先映入眼簾的想法就是把所有情況都...