題目
給定乙個大小為n∣t
imes
mn|times m
n∣time
sm的迷宮。迷宮由通道和牆壁組成,每一步可以向鄰接的上下左右四個的通道移動,請求出從起點到終點所需的最小步數。限制條件n,m
≤100
n,m\le 100
n,m≤10
0。輸入(』#『
,'.'
,'s'
,'g'
分別表示牆壁、通道、起點和終點)
n=10輸出分析,m=12
n=10, m=12
n=10,m
=12
#s######.#
......#..#
.#.##.##.#
.#........
##.##.####
....#....#
.#######.#
....#.....
.####.###.
....#...g#
寬度優先搜尋按照距開始狀態由近即遠的順序進行搜尋,因此可以很容易地用來求最短路徑、最少操作之類問題的答案。
可以用d[n][m]
陣列把最短距離儲存起來,用充分大得常數inf
來初始化,這樣一來,尚未到達的位置就是inf
。
因為要向四個方向移動,用dx[4]
和dy[4]
兩個陣列來表示四個方向向量,通過迴圈就可以實現四個方向移動得遍歷。
**
#include
#include
#include
using
namespace std;
#define max_size 100
#define inf 100000000
struct place
;char maze[max_size]
[max_size+1]
;int d[max_size]
[max_size]
;void
bfs(place s, place g,
int n,
int m)
, dy[4]
=;// 初始化距離陣列,賦乙個較大值inf
for(
int i=
0; i
)for
(int j=
0; j
) d[i]
[j]= inf;
queue que;
que.
push
(s);
d[s.x]
[s.y]=0
;while
(!que.
empty()
)}}//若輸出inf則為死迷宮,反之,輸出的是最短距離
printf
("%d\n"
, d[g.x]
[g.y]);
}int
main()
if(maze[i]
[j]==
'g')}}
// bfs遍歷
bfs(s, g, n, m)
;return0;
}
輸出
迷宮最短路徑 深度優先搜尋 C python
從迷宮的起點到終點的最短路徑,用深度優先搜尋 c實現 include int n,m,p,q,min 99999999 int a 100 100 book 100 100 void dfs int x,int y,int step if x p y q for k 0 k 3 k return i...
無權最短路 寬度優先搜尋
2017 09 13 21 54 52 writer pprp 圖論全部都忘記了,重新學一下吧,之前學的實在是太爛了 測試資料如下 7 12 頂點個數,路徑個數 3 11 4 1 22 4 2 54 3 4 54 6 4 73 6 5 76 7 3 起始點 如下 theme 無權最短路徑問題 com...
迷宮(深度搜尋 存最短路徑)
問題描述 定義乙個二維陣列 定義乙個5 5的陣列maze 5 5 它表示乙個迷宮,其中的1表示牆壁,0表示可以走的路,只能橫著走或豎著走,不能斜著走,要求程式設計序找出從左上角到右下角的最短路線。輸入 乙個5 5的二維陣列,表示乙個迷宮。資料保證有唯一解。輸出 左上角到右下角的最短路徑,格式如樣例所...