題目**:
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
/因為起點為1,故需減去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必須開啟門,但是,開門之前必須在迷宮裡找到這個開啟這個...