總時間限制: 100ms 記憶體限制: 65536kb
描述
阿爾吉儂是乙隻聰明又慵懶的小白鼠,它最擅長的就是走各種各樣的迷宮。今天它要挑戰乙個非常大的迷宮,研究員們為了鼓勵阿爾吉儂盡快到達終點,就在終點放了一塊阿爾吉儂最喜歡的乳酪。現在研究員們想知道,如果阿爾吉儂足夠聰明,它最少需要多少時間就能吃到乳酪。
迷宮用乙個r×c的字元矩陣來表示。字元s表示阿爾吉儂所在的位置,字元e表示乳酪所在的位置,字元#表示牆壁,字元.表示可以通行。阿爾吉儂在1個單位時間內可以從當前的位置走到它上下左右四個方向上的任意乙個位置,但不能走出地圖邊界。
輸入第一行是乙個正整數t(1 <= t <= 10),表示一共有t組資料。
每一組資料的第一行包含了兩個用空格分開的正整數r和c(2 <= r, c <= 200),表示地圖是乙個r×c的矩陣。
接下來的r行描述了地圖的具體內容,每一行包含了c個字元。字元含義如題目描述中所述。保證有且僅有乙個s和e。
輸出對於每一組資料,輸出阿爾吉儂吃到乳酪的最少單位時間。若阿爾吉儂無法吃到乳酪,則輸出「oop!」(只輸出引號裡面的內容,不輸出引號)。每組資料的輸出結果佔一行。
樣例輸入
33 4.s..
###.
..e.
3 4.s..
.e..
....
3 4.s..
####
..e.
樣例輸出
51oop!
演算法分析:廣搜。
**一:使用c++ stl的佇列
1 #include2 #include3 #include4using
namespace
std;56
struct
obj7;10
11int
t,r,c;
12char map[202][202
];13 queueq;
14struct obj s,e;//
起點和終點
1516
int dx[4]=;//
上右下左
17int dy[4]=;
18void
bfs();
1920
int main(int argc, char *ar**)
2142
else
if(map[i][j]=='e'
)43 44}
45while ((cccc = getchar()) != eof && cccc != '\n'
);46
//不停地使用getchar()獲取緩衝中字元,直到獲取的c是「\n」或檔案結尾符eof為止 47}
4849
bfs();
5051
if(e.step==-1) printf("
oop!\n");
52else printf("
%d\n
",e.step); 53}
54return0;
55}5657
void
bfs()
5883}84
}85q.pop();86}
87 }
**二:不使用系統佇列,自己模擬佇列。
1//2 #include3 #include
4using
namespace
std;
5struct
obj6;9
10int
t,r,c;
11char a[201][201
];12
intans,sx,sy,ex,ey;
13struct obj que[40001];//
que是廣搜佇列
14int dx[4]=;//
上下右左
15int dy[4]=;
1617
void
bfs()
1832
if(a[xx][yy]=='.'
)33 a[xx][yy]='
#',que[w].x=xx,que[w].y=yy,que[w].step=que[t].step+1,w++;34}
35}36 t++;37}
38}39int
main()
4056
bfs();
57if(ans==-1) cout<<"
oop!
"<58else cout60 }
NOI 7218 獻給阿爾吉儂的花束
描述 阿爾吉儂是乙隻聰明又慵懶的小白鼠,它最擅長的就是走各種各樣的迷宮。今天它要挑戰乙個非常大的迷宮,研究員們為了鼓勵阿爾吉儂盡快到達終點,就在終點放了一塊阿爾吉儂最喜歡的乳酪。現在研究員們想知道,如果阿爾吉儂足夠聰明,它最少需要多少時間就能吃到乳酪。迷宮用乙個r c的字元矩陣來表示。字元s表示阿爾...
獻給阿爾吉儂的花束
阿爾吉儂是乙隻聰明又慵懶的小白鼠,它最擅長的就是走各種各樣的迷宮。今天它要挑戰乙個非常大的迷宮,研究員們為了鼓勵阿爾吉儂盡快到達終點,就在終點放了一塊阿爾吉儂最喜歡的乳酪。現在研究員們想知道,如果阿爾吉儂足夠聰明,它最少需要多少時間就能吃到乳酪。迷宮用乙個 r c 的字元矩陣來表示。字元 s 表示阿...
zufeoj 獻給阿爾吉儂的花束
阿爾吉儂是乙隻聰明又慵懶的小白鼠,它最擅長的就是走各種各樣的迷宮。今天它要挑戰乙個非常大的迷宮,研究員們為了鼓勵阿爾吉儂盡快到達終點,就在終點放了一塊阿爾吉儂最喜歡的乳酪。現在研究員們想知道,如果阿爾吉儂足夠聰明,它最少需要多少時間就能吃到乳酪。迷宮用乙個r c的字元矩陣來表示。字元s表示阿爾吉儂所...