AcWing 95 費解的開關(遞推)

2021-10-22 10:08:15 字數 965 閱讀 8338

題目

#include

#include

#include

#include

using

namespace std;

const

int n =6;

char g[n]

[n], backup[n]

[n];

//backup用於儲存,複製原陣列

int dx[5]

=, dy[5]

=;//用於方位轉化

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 dark =

false

;for

(int i =

0; i <

5; i ++

)//如果最後一行全為1,全部都為1(只要下面一行為1,上面一行一定為1)

if(g[4]

[i]==

'0')if(

!dark) res =

min(res, step)

;//找出最少的步數,賦值給res

memcpy

(g, backup,

sizeof g)

;//將g陣列還原為初始狀態(與34行對應) }if

(res >

6) res =-1

;//如果超過6次,結果為-1

cout << res << endl;

}return0;

}

遞推 AcWing 95 費解的開關

思路 列舉第一行的所有情況 列舉完第一行後,固定住第一行,此時第二行按哪個按鈕是確定的。假設第一行某盞燈是0,那麼需要按第二行對應的燈泡來改變第一行。同理,操作第三行和第四行 遍歷第五行看看是否都為1。如果都為1,則達到目標。include include using namespace std c...

acwing 95 費解的開關

時 空限制 1s 256mb 你玩過 拉燈 遊戲嗎?25盞燈排成乙個5x5的方形。每乙個燈都有乙個開關,遊戲者可以改變它的狀態。每一步,遊戲者可以改變某乙個燈的狀態。遊戲者改變乙個燈的狀態會產生連鎖反應 和這個燈上下左右相鄰的燈也要相應地改變其狀態。我們用數字 1 表示一盞開著的燈,用數字 0 表示...

AcWing 95 費解的開關

你玩過 拉燈 遊戲嗎?25盞燈排成乙個5x5的方形。每乙個燈都有乙個開關,遊戲者可以改變它的狀態。每一步,遊戲者可以改變某乙個燈的狀態。遊戲者改變乙個燈的狀態會產生連鎖反應 和這個燈上下左右相鄰的燈也要相應地改變其狀態。我們用數字 1 表示一盞開著的燈,用數字 0 表示關著的燈。下面這種狀態 101...