狀態壓縮BFS

2021-10-25 05:43:55 字數 1472 閱讀 3753

魔板,狀態壓縮bfs

#include

#include

#include

#include

#include

#include

using

namespace std;

unordered_mapint> dist;

//記錄變換到當前狀態所需要的步驟數

unordered_mapchar

, string>

> pre_s;

//記錄當前狀態的上乙個狀態時什麼,以及如何變化而來的

queue q;

string st, en;

//開始時的序列和目標序列

int g[2]

[4];

string pull()

for(

int i =

3;i >=

0; i--

)return res;

}void

push

(string t)

for(

int i =

3; i >=

0; i--)}

string move_a

(string t)

return

pull()

;}string move_b

(string t)

;for

(int i =

3; i >

0; i--

) g[0]

[0]= tmp[0]

; g[1]

[0]= tmp[1]

;return

pull()

;}string move_c

(string t)

void

bfs();

while

(!q.

empty()

) q.

push

(m[i]);

}}}}

intmain()

} st =

"12345678";if

(st == en)

bfs();

int d = dist[en]

; cout << d << endl;

string p = en;

string ans;

while

(p != st)

reverse

(ans.

begin()

, ans.

end())

; cout << ans << endl;

fclose

(stdin);

fclose

(stdout);

return0;

}

hdu 2209 BFS 狀態壓縮

這題bfs是比較簡單,但是就是在狀態壓縮和那個翻牌的操作就蛋疼了。開始的時候暴力。華麗麗的超時了。最後看了別人的思路,才恍然大悟。這題 因為翻牌是0變1,1變0,所以可以通過異或來實現,而每一位的翻牌操作,只需要事前把用來異或的數算出來儲存就行,如下 handle 1 3 handle length...

hdu4845 狀態壓縮BFS

題意 給乙個n m的矩陣,從11,走到nm,格仔和格仔之間可能有牆,也可能有門,有的格仔上面有鑰匙,相應的鑰匙開相應的們,撿鑰匙和開門都不需要時間,問你最少多少部能走到nm.思路 哎!一眼就看出來了是個狀態壓縮搜尋的水題,結果wa了將近兩個小時,就是因為忽略了乙個點可能有多把鑰匙,回來說下這個題,我...

hdu 5025 bfs 狀態壓縮

首先因為鑰匙是順序拿取的,所以記錄當前取到第幾把就可以 因為殺蛇是無序的,所以要用0 1二進位制數表示 然後寬搜就好了 wrong了一天就是讀入問題,默默反省 include include include include include include define max 107 using n...