阿爾吉儂是乙隻聰明又慵懶的小白鼠,它最擅長的就是走各種各樣的迷宮。
今天它要挑戰乙個非常大的迷宮,研究員們為了鼓勵阿爾吉儂盡快到達終點,就在終點放了一塊阿爾吉儂最喜歡的乳酪。
現在研究員們想知道,如果阿爾吉儂足夠聰明,它最少需要多少時間就能吃到乳酪。
迷宮用乙個 r×c 的字元矩陣來表示。
字元 s 表示阿爾吉儂所在的位置,字元 e 表示乳酪所在的位置,字元 # 表示牆壁,字元 . 表示可以通行。
阿爾吉儂在 1 個單位時間內可以從當前的位置走到它上下左右四個方向上的任意乙個位置,但不能走出地圖邊界。
輸入格式
第一行是乙個正整數 t,表示一共有 t 組資料。
每一組資料的第一行包含了兩個用空格分開的正整數 r 和 c,表示地圖是乙個 r×c 的矩陣。
接下來的 r 行描述了地圖的具體內容,每一行包含了 c 個字元。字元含義如題目描述中所述。保證有且僅有乙個 s 和 e。
輸出格式
對於每一組資料,輸出阿爾吉儂吃到乳酪的最少單位時間。
若阿爾吉儂無法吃到乳酪,則輸出「oop!」(只輸出引號裡面的內容,不輸出引號)。
每組資料的輸出結果佔一行。
資料範圍1
…e.輸出樣例:51
oop!
bfs(利用佇列來實現)
如果有解一定會找出路徑
找出的路徑一定是最小的,
常見模板:
queue -------------初始狀態
while(queue.size()) -------------當佇列不空時
}
#include
#include
#include
#include
#include
using
namespace std;
typedef pair<
int,
int>pii;
const
int n=
210;
int t;
int r,c;
char s[n]
[n];
int dist[n]
[n];
intbfs
(pii start,pii end)
;int dy[4]
=;while
(q.size()
)//遇到牆
if(x1<
0|| x1>=r || y1<
0|| y1>=c)
// 出界;
if(dist[x1]
[y1]!=-
1)//被訪問過;
dist[x1]
[y1]
=dist[t.first]
[t.second]+1
;if(end.first==x1 && end.second==y1)
return dist[x1]
[y1]
; q.
push()
;}}return-1
;}intmain()
for(
int i=
0;i}if
(s[i]
[j]==
'e');}
}}int distance=
bfs(start,end);if
(distance==-1
)puts
("oop!");
else
}return0;
}
使用結構體定義queue陣列的方法
#include
#include
#include
#include
using
namespace std;
struct p
;const
int n =
210;
int n, m;
char g[n]
[n];
int dist[n]
[n];
p q[n*n*n]
;int
bfs(p start, p end)
, dy[4]
=;while
(hh<=tt);}
}return-1
;}intmain()
;else
if(g[i]
[j]==
'e') end =
;int distance =
bfs(start, end);if
(distance ==-1
)puts
("oop!");
else
printf
("%d\n"
, distance);}
return0;
}
獻給阿爾吉儂的花束 bfs 模板
阿爾吉儂是乙隻聰明又慵懶的小白鼠,它最擅長的就是走各種各樣的迷宮。今天它要挑戰乙個非常大的迷宮,研究員們為了鼓勵阿爾吉儂盡快到達終點,就在終點放了一塊阿爾吉儂最喜歡的乳酪。現在研究員們想知道,如果阿爾吉儂足夠聰明,它最少需要多少時間就能吃到乳酪。迷宮用乙個 r c 的字元矩陣來表示。字元 s 表示阿...
獻給阿爾吉儂的花束(bfs)
阿爾吉儂是乙隻聰明又慵懶的小白鼠,它最擅長的就是走各種各樣的迷宮。今天它要挑戰乙個非常大的迷宮,研究員們為了鼓勵阿爾吉儂盡快到達終點,就在終點放了一塊阿爾吉儂最喜歡的乳酪。現在研究員們想知道,如果阿爾吉儂足夠聰明,它最少需要多少時間就能吃到乳酪。迷宮用乙個 r c 的字元矩陣來表示。字元 s 表示阿...
獻給阿爾吉儂的花束
阿爾吉儂是乙隻聰明又慵懶的小白鼠,它最擅長的就是走各種各樣的迷宮。今天它要挑戰乙個非常大的迷宮,研究員們為了鼓勵阿爾吉儂盡快到達終點,就在終點放了一塊阿爾吉儂最喜歡的乳酪。現在研究員們想知道,如果阿爾吉儂足夠聰明,它最少需要多少時間就能吃到乳酪。迷宮用乙個 r c 的字元矩陣來表示。字元 s 表示阿...