HDOJ 1429 勝利大逃亡(續)

2021-07-14 19:10:13 字數 1178 閱讀 3660

problem description

ignatius再次被魔王抓走了(搞不懂他咋這麼討魔王喜歡)……

這次魔王汲取了上次的教訓,把ignatius關在乙個n*m的地牢裡,並在地牢的某些地方安裝了帶鎖的門,鑰匙藏在地牢另外的某些地方。剛開始ignatius被關在(sx,sy)的位置,離開地牢的門在(ex,ey)的位置。ignatius每分鐘只能從乙個座標走到相鄰四個座標中的其中乙個。魔王每t分鐘回地牢視察一次,若發現ignatius不在原位置便把他拎回去。經過若干次的嘗試,ignatius已畫出整個地牢的地圖。現在請你幫他計算能否再次成功逃亡。只要在魔王下次視察之前走到出口就算離開地牢,如果魔王回來的時候剛好走到出口或還未到出口都算逃亡失敗。

input

每組測試資料的第一行有三個整數n,m,t(2<=n,m<=20,t>0)。接下來的n行m列為地牢的地圖,其中包括:

. 代表路

* 代表牆

@ 代表ignatius的起始位置

^ 代表地牢的出口

a-j 代表帶鎖的門,對應的鑰匙分別為a-j

a-j 代表鑰匙,對應的門分別為a-j

每組測試資料之間有乙個空行。

output

針對每組測試資料,如果可以成功逃亡,請輸出需要多少分鐘才能離開,如果不能則輸出-1。

【狀態壓縮】

#include#include#include#includeusing namespace std;

int n, m, t;

vectorgraph;

int visited[22][22][1026];

int dx[4] = ;

int dy[4] = ;

struct point

point(int x, int y, int z) };

int bfs(int sx, int sy, int sz)

if (graph[x][y] == '^')

if (graph[x][y] >= 'a' && graph[x][y] <= 'z')

if (graph[x][y] >= 'a' && graph[x][y] <= 'z')}}

} }return -1;

}int main()

}} cout << bfs(sx, sy, 0) << endl;

}}

1429 勝利大逃亡( 續 ) hdu

ignatius再次被魔王抓走了 搞不懂他咋這麼討魔王喜歡 這次魔王汲取了上次的教訓,把ignatius關在乙個n m的地牢裡,並在地牢的某些地方安裝了帶鎖的門,鑰匙藏在地牢另外的某些地方。剛開始ignatius被關在 sx,sy 的位置,離開地牢的門在 ex,ey 的位置。ignatius每分鐘只...

HDU1429 勝利大逃亡 續

學習位壓縮很好的一道題,因為只有10把鑰匙,那麼可以把10鑰匙壓縮二進位制,比如1000就表示身上只要第4把鑰匙的狀態,110表示帶有第2把和第3把鑰匙,那麼要判斷當前的鑰匙串有沒有能開啟當前門鑰匙,那麼就只要乙個 運算就可以,因為11101110 00100000 00100000 這樣就說明那一...

hdu 1429 勝利大逃亡 續

code include include using namespace std struct px struct px start char map 25 25 int mark 25 25 1025 dir 4 2 三維表,走過的路徑對應表的狀態 int wys 10 int n,m,t boo...