hdu 1429勝利大逃亡 續

2021-10-07 23:25:33 字數 1299 閱讀 2058

描述

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

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

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

. 代表路

4 5 16

@a.b.

a*..

…^c…b

sample output

16-1

本題需要打標記,因為可能走過乙個點數次,我開始的時候不打標記,就爆了很多次記憶體。

**

#include#include#include#includeusing namespace std;

#define mem(a,b) memset(a,b,sizeof(a));

#define ll long long int

const int inf = 0x3f3f3f3f;

int n,m,t;

char map1[25][25];

int vis[25][25][1030];//標記狀態

int dir[4][2]=,,,};

struct point

next1,now;

bool ok(int x,int y,int key)//判斷

int bfs(int x,int y,int key,int step)

if(map1[next1.x][next1.y]>='a'&&map1[next1.x][next1.y]<='j')

que.push(next1);

vis[next1.x][next1.y][next1.key]=1;//標記當前狀態}}

}return -1;

}int main()

}getchar();

}js=bfs(now.x,now.y,now.key,now.step);

printf("%d\n",js);

}return 0;

}

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...

hdu 1429勝利大逃亡 續

題目 一開始想了好幾種方法。最後實驗都錯了。要麼是就是演算法思想錯誤。然後以為可以這樣。果斷。記憶體超出。下面是錯誤 include include includeusing namespace std define n 21 int n,m,t char map n n bool visited ...