狀態壓縮 搜尋 SSL 1150 密室

2021-08-28 09:05:02 字數 1050 閱讀 1559

有n

nn個房間, m

mm個傳送門,k

kk種鑰匙,每個房間有一些鑰匙,每個傳送門可以從乙個房間傳到另乙個房間,需要一定的鑰匙才能使用傳送門,求出經過最少的傳送門能從1

11號房間到達n

nn號房間。

壓縮鑰匙的狀態,然後bfs

bfsbf

s就行了。

#include

#include

#include

#include

using

namespace std;

struct nodee[

6001];

struct state

;int n, m, k, ans, x;

int key[

5001

], list[

5001

], d[

2048][

5001];

void

bfs())

;memset

(d,-1,

sizeof

(d))

; d[key[1]

][1]

=0;while

(q.size()

)); d[s | key[y]

][y]

= d[s]

[head.w]+1

;}}if

(head.w == n) ans =

min(ans, d[head.k]

[n]);}

}int

main()

}for

(int i =

1; i <= m; i++)}

ans =

2147483647

;bfs()

;if(ans ==

2147483647

)printf

("no solution");

else

printf

("%d"

, ans)

;}

狀態壓縮 廣度優先搜尋 迷宮遊戲

題目描述 pluto 已經很久沒有玩遊戲了,今天 pluto 難得能夠歇一天。於是,pluto 決定要玩乙個非常好玩的迷宮遊戲。這個迷宮遊戲在乙個 n 行 m 列的矩陣上進行,遊戲中的任意時刻不能走出這個矩陣。在這個矩陣中,有下列幾種元素 表示一塊平地。x 表示一堵牆,不能經過。s 表示遊戲的起點,...

交換遊戲 狀態壓縮 記憶化搜尋

題目描述 一列上有12個孔,這12個孔中有些孔被遮擋住了。假定我們用 來表示沒被遮擋住的孔,用 o 來表示被遮擋住的孔。如果相鄰的三個孔有兩個孔被遮擋,並且被遮擋的兩個孔相鄰,就是 oo 和 oo 對於這樣的三個孔,我們可以將中間的孔的遮擋物移開,代價是將一端的遮擋物移到另一端沒有被遮擋的孔上面。對...

百練 4124 狀態壓縮 記憶化搜尋

傳送門 題意就不說了.題目要求是一定是從標號1出發,最後到達標號n,中間不重複的經過完其他島.那麼問題就是如何搜尋.中間有14個點,那麼最壞的情況就是14 中情況,這樣肯定是會超時的.所以我們需要剪枝,因為我們可以發現中途到達某個點時,如果此時的深度大於了曾經經過的點的深度或者目標點的深度,那麼直接...