HRBUST 1613 迷宮問題 (bfs)

2021-09-12 02:09:46 字數 1473 閱讀 4192

題幹:

小z身處在乙個迷宮中,小z每分鐘可以走到上下左右四個方向的相鄰格之一。迷宮中有一些牆和障礙物。

同時迷宮中也有一些傳送門,當小z走到任意乙個傳送門時,可以選擇傳送到其他任意的傳送門(傳送是不花費時間的),

當然也可以停留在原地。現在小z想知道走出迷宮需要花費的最少時間。

input

輸入第一行為組數t(t<=10)。

對於每組資料第一行為兩個整數r和c(1<=r,c<=100)。以下r行每行有c個字元,即迷宮地圖。

其中"#"代表牆和障礙物,"."表示空地,"p"表示傳送門,"z"表示小z的起始位置,"w"表示迷宮出口。

對於每組資料保證起始位置和迷宮出口唯一。

output

對於每組資料,輸出走出迷宮的最短時間(單位:分鐘)。如果無法走出迷宮則輸出"impossible"。

sample input

23 4

.z..

.p#.

##pw

4 4z..p

....

##..

w#.p

sample output

2impossible

解題報告:

裸。bfs複習。

ac**:

#include#include#include#include#include#include#include#include#include#include#define ll long long

#define pb push_back

#define pm make_pair

using namespace std;

const int max = 2e3 + 5;

struct n

n(int x,int y):x(x),y(y){}

} p[max];

struct node

node(int x,int y,int t):x(x),y(y),t(t){}

};bool vis[505][505];

int tot,r,c;

char maze[505][505];

int nx[4] = ;

int ny[4] = ;

int bfs(n st,n ed)

if(maze[cur.x][cur.y] == 'p')

} }return -1;

}int main()

int stx,sty,edx,edy;

for(int i = 1; i<=r; i++)

} int ans = bfs(n(stx,sty),n(edx,edy));

if(ans == -1) printf("impossible\n");

else printf("%d\n",ans);

} return 0 ;}/*

14:46 - 14:57

*/

Hrbust 1613 迷宮問題(廣搜)

走迷宮問題就是裸的廣搜,即使加了傳送門也只是搜尋時稍作改動。z是起點,p是傳送門,是障礙,w是出口。問是否能從起點到出口,能的話輸出最少時間。因為資料量較小,直接廣搜3遍,第一遍當沒有傳送門走一遍,得到乙個ans。第二遍和第三遍分別從起點和重點開始搜,找到離自己最近的傳送門,最終求和,即可得到走傳送...

Hrbust 1613 迷宮問題(廣搜)

走迷宮問題就是裸的廣搜,即使加了傳送門也只是搜尋時稍作改動。z是起點,p是傳送門,是障礙,w是出口。問是否能從起點到出口,能的話輸出最少時間。因為資料量較小,直接廣搜3遍,第一遍當沒有傳送門走一遍,得到乙個ans。第二遍和第三遍分別從起點和重點開始搜,找到離自己最近的傳送門,最終求和,即可得到走傳送...

ssl1613最短路徑問題

description 平面上有n個點 n 100 每個點的座標均在 10000 10000之間。其中的一些點之間有連線。若有連線,則表示可從乙個點到達另乙個點,即兩點間有通路,通路的距離為兩點直線的距離。現在的任務是找出從一點到另一點之間的最短路徑。input 輸入檔案short.in,共有n m...