HDU1253 勝利大逃亡 BFS

2021-07-04 10:19:11 字數 1007 閱讀 5306

hdu1253 勝利大逃亡

題意:

在乙個三維的房間裡找到距離出口的最短路徑,比較最短路徑花的時間和魔王回來的時間 t,若小於等於t,則出逃成功。起點座標為(0,0,0),終點座標為(a-1, b-1, c-1),地圖中0為通路,1為牆。
思路:

典型的bfs,記錄的陣列從常見的二維擴充到了三維。依然使用佇列維護,把初始狀態加入佇列,修改dis陣列的值,取出隊首元素,讓元素依次出隊,判斷是否到達終點,若還沒到達,向鄰近的六個方向移動,判斷移動後的點是否越界、該點是否可達、該點是否被訪問等條件,若滿足,則將改點加入佇列,繼續判斷。直到隊列為空或到達終點,搜尋結束。

#include

#include

#define inf 100000000

#define max 50

using

namespace

std;

struct p

};int a, b, c, t;

int dis[max][max][max];

int maze[max][max + 1][max + 1];

int dir[6][3]=,,,,,};

int bfs()}}

return dis[a - 1][b - 1][c - 1];

}main()}}

for(int i = 0;i < a;i++)}}

int res = bfs();

if(res <= t)

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

else

printf("-1\n");

}}

總結:

做了一些bfs的題,發現除了用佇列來維護,將初始狀態入隊等固定格式外,最重要的是根據不同題目狀態記錄的方式不同。有的題目是二維陣列,有的是三維,判斷新的點是否加入佇列的條件也略有不同,只要做題的時候仔細判斷好狀態轉移的條件,不要漏,一般就能把題目做出來。

HDU 1253 勝利大逃亡 bfs

題目大意 給出乙個三維迷宮的布局情況,輸入資料的第一行是乙個正整數k,表明測試資料的數量.每組測試資料的第一行是四個正整數a,b,c和t 1 a,b,c 50,1 t 1000 它們分別代表城堡的大小和魔王回來的時間.然後是a塊輸入資料 先是第0塊,然後是第1塊,第2塊.每塊輸入資料有b行,每行有c...

hdu1253 勝利大逃亡(BFS)

簡單的搜尋題,以往做的都是二維的,這個是三維的,建好圖之後按照以前的做法來就行了 include include include include include include define inf 1 30 define n 55 using namespace std int a n n n b...

HDU1253 勝利大逃亡 BFS

problem description ignatius被魔王抓走了,有一天魔王出差去了,這可是ignatius逃亡的好機會.魔王住在乙個城堡裡,城堡是乙個a b c的立方體,可以被表示成a個b c的矩陣,剛開始ignatius被關在 0,0,0 的位置,離開城堡的門在 a 1,b 1,c 1 的位...