BFS求最短路

2022-09-08 01:21:18 字數 1178 閱讀 4084

假設有乙個n行m列的迷宮,每個單位格要麼是空地(用1來表示)要麼是障礙物(用0來表示).如何找到從起點到終點的最短路徑?

分析:要找到終點到起點的最短路徑,可以使用二叉樹的bfs,因為二叉樹的bfs的訪問順序就是結點到根節點的距離,從小到大訪問的,因此可以從迷宮圖的起點開始進行bfs的寬度優先遍歷。

遍歷過程中需要實現:

(1)記錄每個結點到起點的距離;

(2)記錄每個結點的父結點,構造出bfs二叉樹,根據該樹,給出任意乙個空地的座標,都可以根據父節點回溯到起點(0,0);

(3)每乙個結點都要訪問其上下左右四個方向,並判斷每個方向的節點位置是否合格,合格的加入佇列;

遍歷成功後,根據給出終點位置,使用遞迴來輸出起點到該終點的路徑;

1 #include 2 #include 3 #include 4

using

namespace

std;

5const

int maxn = 5;6

struct

node

10};

11int graph[maxn][maxn]; //

迷宮陣列

12int dis[maxn][maxn]; //

記錄每個結點到起點的距離

13struct node path[maxn][maxn]; //

記錄每個結點的父節點

14const

int dir[4][2] = ,,,}; //

每個結點的四個方向

15bool judge(int dr,int

dc)20

return

false;21

} 22

23void bfs()38}

39} 40}

41void print_path(int r,int

c)47

print_path(n.x,n.y);

48 cout << "("

<< r << ","

<< c << ")"

<< "";

49}

50int

main()55}

56bfs();

57 print_path(4,4

);58

return0;

59 }

BFS求最短路

假設有乙個n行m列的迷宮,每個單位要麼是空地 用1表示 要麼是障礙物 用0表示 如和找到從起點到終點的最短路徑?利用bfs搜尋,逐步計算出每個節點到起點的最短距離,以及最短路徑每個節點的前乙個節點。最終將生成一顆以起點為根的bfs樹。此時bfs可以求出任意一點到起點的距離。poj3984 bfs求最...

BFS 迷宮問題(求最短路)

題目 給定乙個大小為 n m 的迷宮。迷宮由通道和牆壁組成,每一步可以向鄰接的上下左右四格 的通道移動。請求出從起點到終點所需的最小步數。請注意,本題假定從起點一定可以移動 到終點。限制條件 bfs 迷宮問題自己寫 created by showlo on 2018 4 13.include inc...

poj 2215 bfs求最短路

背景 最短路典型bfs,竟然ml 後來發現時vis陣列標記的時機不對,我開始是把每乙個位置把它從佇列頭呼叫的時候才標記為訪問過!但這種依然是有重複的內容出現在佇列中,應該在對每乙個位置入隊的時候就標記為訪問過。我的 include include include include include in...