FZU 2285 迷宮尋寶 BFS最短路徑問題

2021-09-12 07:30:47 字數 1624 閱讀 1304

題目**:

problem 2285 迷宮尋寶

accept: 276 submit: 1040 time limit: 1000 msec memory limit : 32768 kb

problem description

洪尼瑪今天準備去尋寶,在乙個n*n (n行, n列)的迷宮中,存在著乙個入口、一些牆壁以及乙個寶藏。由於迷宮是四連通的,即在迷宮中的乙個位置,只能走到與它直接相鄰的其他四個位置(上、下、左、右)。現洪尼瑪在迷宮的入口處,問他最少需要走幾步才能拿到寶藏?若永遠無法拿到寶藏,則輸出-1。

input

多組測試資料。

每組資料輸入第一行為正整數n,表示迷宮大小。

接下來n行,每行包括n個字元,其中字元』.『表示該位置為空地,字元』#'表示該位置為牆壁,字元』s』表示該位置為入口,字元』e』表示該位置為寶藏,輸入資料中只有這四種字元,並且』s』和』e』僅出現一次。

output

輸出拿到寶藏最少需要走的步數,若永遠無法拿到寶藏,則輸出-1。

sample input 5

s.#…

#.#.#

#.#.#

#…e#…

sample output

7bfs入門題,思路見注釋

這題我居然tle了十多次

後來慢慢debug,後來發現是輸入的問題,scanf是格式化輸入,cin是輸入流,cin之所以效率低,是先把要輸出的東西存入緩衝區,再輸出,一般情況下滿了才重新整理的,所以導致效率降低,打acm時遇到卡時間的題目需要注意一下!!!

#include

#include

#include

#include

using namespace std;

const

int max =

1000

;char maza[max]

[max]

;//記錄迷宮

int step[max]

[max]

;//記錄步數

int sx,sy,ex,ey;

//記錄起點和終點

struct point

point1,point2;

//記錄當前位置和下一位置

int dir[4]

[2]=

,,,}

;//上下左右四個方向

queue q;

//佇列

intmain()

step[sx]

[sy]=1

;//設起點為1表示已經被訪問過

point1.x=sx;

point1.y=sy;

q.push

(point1)

;//把起點新增到佇列

while

(!q.

empty()

)//當佇列不為空時進行迴圈查詢佇列}if

(step[ex]

[ey]!=0

)}if(flag)

cout<[ey]-1

else

cout<<-1

<}return0;

}

write by 0xcc 3/9/2019.

FZU 2285 迷宮尋寶

problem 2285 迷宮尋寶 洪尼瑪今天準備去尋寶,在乙個n n n行,n列 的迷宮中,存在著乙個入口 一些牆壁以及乙個寶藏。由於迷宮是四連通的,即在迷宮中的乙個位置,只能走到與它直接相鄰的其他四個位置 上 下 左 右 現洪尼瑪在迷宮的入口處,問他最少需要走幾步才能拿到寶藏?若永遠無法拿到寶藏...

FZU2285 迷宮問題 BFS求最短路 板子題

problem description 洪尼瑪今天準備去尋寶,在乙個n n n行,n列 的迷宮中,存在著乙個入口 一些牆壁以及乙個寶藏。由於迷宮是四連通的,即在迷宮中的乙個位置,只能走到與它直接相鄰的其他四個位置 上 下 左 右 現洪尼瑪在迷宮的入口處,問他最少需要走幾步才能拿到寶藏?若永遠無法拿到...

迷宮尋寶(一) bfs

時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述乙個叫acm的尋寶者找到了乙個藏寶圖,它根據藏寶圖找到了乙個迷宮,這是乙個很特別的迷宮,迷宮裡有n個編過號的門 n 5 它們分別被編號為a,b,c,d,e.為了找到寶藏,acm必須開啟門,但是,開門之前必須在迷宮裡找到這個開啟這個...