迷宮問題bfs

2021-08-04 04:52:28 字數 1367 閱讀 6472

小明置身於乙個迷宮,請你幫小明找出從起點到終點的最短路程。

小明只能向上下左右四個方向移動。

輸入包含多組測試資料。輸入的第一行是乙個整數t,表示有t組測試資料。

每組輸入的第一行是兩個整數n和m(1<=n,m<=100)。

接下來n行,每行輸入m個字元,每個字元表示迷宮中的乙個小方格。

字元的含義如下:

『s』:起點

『e』:終點

『-』:空地,可以通過

『#』:障礙,無法通過

輸入資料保證有且僅有乙個起點和終點。

對於每組輸入,輸出從起點到終點的最短路程,如果不存在從起點到終點的路,則輸出-1。

1

5 5s-###

-----

##---

e#---

---##

9
給乙個由-和#組成的地圖,-代表空地,#代表障礙物;s為出發點e為終點,問從s到e至少需要經過多少步?

解題思路:

從起點開始,下一步有上下左右四個方向可以選擇,如果這四個方向沒有超出地圖,那麼這四個點有分別由四個方向選擇,這樣一直走下去,直到找到我們需要的終點。到找到終點為止共進行了幾次選擇方向的次數即是最少需要的步數。

**:

#include#include#includestruct note

;int main()

,,,};

int t,i,j,k,n,m,x1,y1,p,q,tx,ty,flag;

int head,tail;

char s1[110][110];

scanf("%d",&t);

while(t--)

if(a[i][j]=='e')}}

//printf("x1x2 %d %d %d %d\n",x1,y1,p,q);

head=1;tail=1;

que[tail].x=x1;

que[tail].y=y1;

que[tail].f=0;

que[tail].s=0;

tail++;

book[x1][y1]=1;

flag=0;

while(headm||ty<1||ty>n)

continue;

if(a[tx][ty]!='#'&&book[tx][ty]==0)

if(tx==p&&ty==q)

}if(flag==1)

break;

head++;

}if(flag==0)

else

printf("%d\n",que[tail-1].s);

} return 0;

}

迷宮問題bfs

迷宮問題 採用佇列的廣度優先遍歷 bfs 思想是從乙個頂點v0開始,輻射狀地優先遍歷其周圍較廣的區域 找到的解為最優解 include define m 8 define n 8 define maxsize 1000 typedef struct box typedef struct qutype...

迷宮問題BFS

the code 資料結構迷宮.cpp 定義控制台應用程式的入口點。include stdafx.h include include include include define n 4 定義迷宮為4 4 using namespace std struct pot 為記錄路徑的rec準備,座標 x...

迷宮問題(BFS)

給定乙個大小為n m的迷宮,由通道 和牆壁 組成,其中通道s表示起點,通道g表示終點,每一步移動可以達到上下左右中不是牆壁的位置。試求出起點到終點的最小步數。本題假定迷宮是有解的 n,m 100 樣例輸入 10 10 s g 這道題目以及解法均來自 挑戰程式設計競賽 第2版 第34頁 36頁 書中解...