每日一題 獻給阿爾吉儂的花束(bfs,最短路)

2021-10-19 14:05:32 字數 3125 閱讀 9320

阿爾吉儂是乙隻聰明又慵懶的小白鼠,它最擅長的就是走各種各樣的迷宮。

今天它要挑戰乙個非常大的迷宮,研究員們為了鼓勵阿爾吉儂盡快到達終點,就在終點放了一塊阿爾吉儂最喜歡的乳酪。

現在研究員們想知道,如果阿爾吉儂足夠聰明,它最少需要多少時間就能吃到乳酪。

迷宮用乙個r×c的字元矩陣來表示。

字元s表示阿爾吉儂所在的位置,字元e表示乳酪所在的位置,字元#表示牆壁,字元.表示可以通行。

阿爾吉儂在 1 個單位時間內可以從當前的位置走到它上下左右四個方向上的任意乙個位置,但不能走出地圖邊界。

輸入格式

第一行是乙個正整數t,表示一共有t組資料。

每一組資料的第一行包含了兩個用空格分開的正整數rc,表示地圖是乙個r×c的矩陣。

接下來的r行描述了地圖的具體內容,每一行包含了c個字元。字元含義如題目描述中所述。保證有且僅有乙個se

輸出格式

對於每一組資料,輸出阿爾吉儂吃到乳酪的最少單位時間。

若阿爾吉儂無法吃到乳酪,則輸出「oop!」(只輸出引號裡面的內容,不輸出引號)。

每組資料的輸出結果佔一行。

資料範圍

1<t≤10,

2≤r,c≤200

輸入樣例:

3

3 4.s..

###.

..e.

3 4.s..

.e..

....

3 4.s..

####

..e.

輸出樣例:

5

1oop!

理解dfs,bfs可以參考 這篇文章

#

include

#include

#include

#include

#define

xfirst

#define

ysecond

using

namespace std;

typedef pair<

int,

int> pii;

const

int n =

210;

int n, m;

char g[n]

[n];

int dist[n]

[n];

//狀態陣列,判斷矩陣中的點是否走過,同時記錄該點到起點的最短距離。(沒走過距離為-1,走過距離必為最小距離)

intbfs

(pii start)

, dy=

;//小技巧,用偏移量來表示向 上,下,左,右,移動。

while

(q.size()

));//不是終點就將該點入隊}}

}return-1

;}intmain()

;//記錄起點座標

}int res =

bfs(start);if

(res ==-1

)puts

("oop!");

else cout << res << endl;

}return0;

}

python

def

bfs(x, y)

: q =

[(x, y)

] dist[x]

[y]=

0#距離陣列:與起點的距離

move =[(

-1,0

),(0

,1),

(1,0

),(0

,-1)

]while

len(q)

: sx, sy = q.pop(0)

for i, j in move:

nx, ny = sx + i, sy + j

if0<= nx < r and

0<= ny < c and g[nx]

[ny]

!='#'

and dist[nx]

[ny]==-

1:dist[nx]

[ny]

= dist[sx]

[sy]+1

if g[nx]

[ny]

=='e'

:return dist[nx]

[ny]

(nx, ny)

)return

0t =

int(

input()

)while t:

t -=

1 g =

x, y =0,

0 r, c =

map(

int,

input()

.split())

dist =[[

-1]* c for _ in

range

(r)]

for i in

range

(r):

list

(input()

))for j in

range

(c):

if g[i]

[j]==

's':

x, y = i, j

res = bfs(x,y)

if res:

print

(res)

else

:print

('oop!'

)

獻給阿爾吉儂的花束

阿爾吉儂是乙隻聰明又慵懶的小白鼠,它最擅長的就是走各種各樣的迷宮。今天它要挑戰乙個非常大的迷宮,研究員們為了鼓勵阿爾吉儂盡快到達終點,就在終點放了一塊阿爾吉儂最喜歡的乳酪。現在研究員們想知道,如果阿爾吉儂足夠聰明,它最少需要多少時間就能吃到乳酪。迷宮用乙個 r c 的字元矩陣來表示。字元 s 表示阿...

zufeoj 獻給阿爾吉儂的花束

阿爾吉儂是乙隻聰明又慵懶的小白鼠,它最擅長的就是走各種各樣的迷宮。今天它要挑戰乙個非常大的迷宮,研究員們為了鼓勵阿爾吉儂盡快到達終點,就在終點放了一塊阿爾吉儂最喜歡的乳酪。現在研究員們想知道,如果阿爾吉儂足夠聰明,它最少需要多少時間就能吃到乳酪。迷宮用乙個r c的字元矩陣來表示。字元s表示阿爾吉儂所...

7218 獻給阿爾吉儂的花束

總時間限制 100ms 記憶體限制 65536kb 描述 阿爾吉儂是乙隻聰明又慵懶的小白鼠,它最擅長的就是走各種各樣的迷宮。今天它要挑戰乙個非常大的迷宮,研究員們為了鼓勵阿爾吉儂盡快到達終點,就在終點放了一塊阿爾吉儂最喜歡的乳酪。現在研究員們想知道,如果阿爾吉儂足夠聰明,它最少需要多少時間就能吃到乳...