題幹:
小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...