演算法提高 開燈遊戲 回溯法

2021-09-10 07:49:03 字數 1110 閱讀 2861

題目鏈結

有9盞燈與9個開關,編號都是1~9。

每個開關能控制若干盞燈,按下一次會改變其控制的燈的狀態(亮的變成不亮,不亮變成亮的)。

具體如下:

第乙個開關控制第二,第四盞燈;

第二個開關控制第一,第三,第五盞燈;

第三個開關控制第二,第六盞燈;

第四個開關控制第一,第五,第七盞燈;

第五個開關控制第二,第四,第六,第八盞燈;

第六個開關控制第三,第五,第九盞燈;

第七個開關控制第四,第八盞燈;

第八個開關控制第五,第七,第九盞燈;

第九個開關控制第六,第八盞燈。

開始時所有燈都是熄滅的,開關是關閉著的。要求按下若干開關後,使得只有4盞燈亮著。

#include using namespace std;

bool light[10], t[10];

const int control[10][5]=,

, ,, ,

, ,, ,

,}, on=4;

void slove(int cur)

return;

} t[cur] = 0;

slove( cur+1);

for(int i = 0; control[cur][i]; i++)

light[ control[cur][i]] = !light[ control[cur][i]];

t[cur] = 1;

slove( cur+1); //被選擇需要改回來。

for(int i = 0; control[cur][i]; i++)

light[ control[cur][i]] = !light[ control[cur][i]];

}int main()

輸出格式

輸出所有可能的方案,每行乙個方案,每一行有9個字元,從左往右第i個字元表示第i個開關的狀態("0"表示關閉,"1"表示開啟),按字典序輸出。下面的樣例輸出只是部分方案。

樣例輸出

000001011

000001110

000001111

演算法提高 開燈遊戲

演算法提高 開燈遊戲 時間限制 1.0s 記憶體限制 256.0mb 問題描述 有9盞燈與9個開關,編號都是1 9。每個開關能控制若干盞燈,按下一次會改變其控制的燈的狀態 亮的變成不亮,不亮變成亮的 具體如下 第乙個開關控制第二,第四盞燈 第二個開關控制第一,第三,第五盞燈 第三個開關控制第二,第六...

藍橋杯 演算法提高 開燈遊戲

回溯加判斷,注意在改變燈的狀態的時候要用引用,要不然燈的值不會發生改變 然後在每次判斷輸出完之後要清空一下燈的狀態否則會出錯 include include using namespace std int k 10 int d 10 void change int i void judge else...

藍橋杯 演算法提高VIP 開燈遊戲

題目 1520 藍橋杯 演算法提高vip 開燈遊戲 時間限制 1sec 記憶體限制 128mb 提交 499 解決 241 題目描述 有9盞燈與9個開關,編號都是1 9。每個開關能控制若干盞燈,按下一次會改變其控制的燈的狀態 亮的變成不亮,不亮變成亮的 具體如下 第乙個開關控制第二,第四盞燈 第二個...