你玩過「拉燈」遊戲嗎?25盞燈排成乙個5x5的方形。每乙個燈都有乙個開關,遊戲者可以改變它的狀態。每一步,遊戲者可以改變某乙個燈的狀態。遊戲者改變乙個燈的狀態會產生連鎖反應:和這個燈上下左右相鄰的燈也要相應地改變其狀態。
我們用數字「1」表示一盞開著的燈,用數字「0」表示關著的燈。下面這種狀態
10111在改變了最左上角的燈的狀態後將變成:01101
10111
10000
11011
01111再改變它正中間的燈後狀態將變成:11101
10111
10000
11011
01111給定一些遊戲的初始狀態,編寫程式判斷遊戲者是否可能在6步以內使所有的燈都變亮。11001
11001
10100
11011
第一行輸入正整數n,代表資料中共有n個待解決的遊戲初始狀態。
以下若干行資料分為n組,每組資料有5行,每行5個字元。每組資料描述了乙個遊戲的初始狀態。各組資料間用乙個空行分隔。
一共輸出n行資料,每行有乙個小於等於6的整數,它表示對於輸入資料中對應的遊戲狀態最少需要幾步才能使所有燈變亮。
對於某乙個遊戲初始狀態,若6步以內無法使所有燈變亮,則輸出「-1」。
0
5000 05003
00111
01011
10001
11010
11100
11101
11101
11110
11111
11111
01111
11111
11111
11111
11111
32-1思路
#include
#include
#include
using
namespace std;
const
int n =6;
char g[n]
[n], backup[n]
[n];
int dx=
, dy=
;void
turn
(int x,
int y)
}int main (
)for
(int i =
0; i <
4; i ++
)for
(int j =
0; j <
5; j ++)if
(g[i]
[j]==
'0')
bool flag =
true
;for
(int i =
0; i <
5; i ++)if
(g[4
][i]
=='0')if
(flag) res =
min(res, step)
;memcpy
(g, backup,
sizeof g);}
if(res >6)
puts
("-1");
else cout << res << endl;
}return0;
}
acwing費解的開關
題目 你玩過 拉燈 遊戲嗎?25盞燈排成乙個5x5的方形。每乙個燈都有乙個開關,遊戲者可以改變它的狀態。每一步,遊戲者可以改變某乙個燈的狀態。遊戲者改變乙個燈的狀態會產生連鎖反應 和這個燈上下左右相鄰的燈也要相應地改變其狀態。我們用數字 1 表示一盞開著的燈,用數字 0 表示關著的燈。下面這種狀態 ...
acwing 95 費解的開關
時 空限制 1s 256mb 你玩過 拉燈 遊戲嗎?25盞燈排成乙個5x5的方形。每乙個燈都有乙個開關,遊戲者可以改變它的狀態。每一步,遊戲者可以改變某乙個燈的狀態。遊戲者改變乙個燈的狀態會產生連鎖反應 和這個燈上下左右相鄰的燈也要相應地改變其狀態。我們用數字 1 表示一盞開著的燈,用數字 0 表示...
AcWing 95 費解的開關
你玩過 拉燈 遊戲嗎?25盞燈排成乙個5x5的方形。每乙個燈都有乙個開關,遊戲者可以改變它的狀態。每一步,遊戲者可以改變某乙個燈的狀態。遊戲者改變乙個燈的狀態會產生連鎖反應 和這個燈上下左右相鄰的燈也要相應地改變其狀態。我們用數字 1 表示一盞開著的燈,用數字 0 表示關著的燈。下面這種狀態 101...