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