小明置身於乙個迷宮,請你幫小明找出從起點到終點的最短路程。
小明只能向上下左右四個方向移動。
輸入包含多組測試資料。輸入的第一行是乙個整數t,表示有t組測試資料。
每組輸入的第一行是兩個整數n和m(1<=n,m<=100)。
接下來n行,每行輸入m個字元,每個字元表示迷宮中的乙個小方格。
字元的含義如下:
『s』:起點
『e』:終點
『-』:空地,可以通過
『#』:障礙,無法通過
輸入資料保證有且僅有乙個起點和終點。
對於每組輸入,輸出從起點到終點的最短路程,如果不存在從起點到終點的路,則輸出-1。
15 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頁 書中解...