洛谷P2622 關燈問題II BFS 狀壓

2022-09-03 05:00:10 字數 636 閱讀 1012

有mm

個開關和n

n盞燈,第i

i個開關要麼可以開啟第j

j盞燈,要麼可以關上第j

j盞燈,要麼不對第j

j盞燈起作用。求把n

n盞燈全部開啟的最少步數。

這道題很明顯可以用bfs

bfs做。因為對於每一種情況,我們也就只有m

m種轉移方法,而求的是最優解。

而最多只有10盞燈,所以可以想到用狀壓。這樣每種情況就被壓縮成了0

0~102310

23中的乙個數。

那麼搜就好了。

注意細節。

#include

#include

using

namespace std;

int n,m,a[

101][11

];bool p[

1024];

intchange

(int x,

int y)

//轉換

return x;

}void

bfs()}

}printf

("-1");

return;}

intmain()

洛谷 P2622 關燈問題

輸入輸出樣例 說明切入正題 解 廣搜 手動分割 現有n盞燈,以及m個按鈕。每個按鈕可以同時控制這n盞燈 按下了第i個按鈕,對於所有的燈都有乙個效果。按下i按鈕對於第j盞燈,是下面3中效果之一 如果a i j 為1,那麼當這盞燈開了的時候,把它關上,否則不管 如果為 1的話,如果這盞燈是關的,那麼把它...

洛谷p2622 關燈問題

乙個比較典型的狀態壓縮演算法,不過現在還有點沒看懂。等留著以後再看.include include include include include includeusing namespace std int read while ss 0 ss 9 return f x void print in...

洛谷 P2622 關燈問題II

洛谷p2622 tag 狀態壓縮 題目大意 n個燈,m個按鈕,每個按鈕都可以控制所有燈,給出每個按鈕對每個燈的影響,求從全開到全關的最短步數。題目分析 每盞燈只有兩個狀態,即開與關,記為0和1,則所有燈的狀態總數為2 n n 3時,有000,001,010,100 對每個狀態單獨分析,可以把每個開關...