bfs的路徑列印是把每乙個map中的點記錄, 假設用distance陣列記錄每個點對應的步數,則會出現一條單調1-2-3-4-----一直遞增到最短步數的路徑, 此時的這條路徑即使最短路徑。
如圖中0表示可以走,1表示
由一條遞增序列可以得到最短路徑 1-2-3-4-5-6-7-8
將每個點的座標鏈結起來,由下一步的點去儲存上乙個座標,如map[i][j] = (x,y);
而(x,y)為上乙個點的座標;map[x][y] = (x2,y2);這樣就可以將最短路徑儲存起來 然後遞迴輸出;
輸出函式為
在這裡插入**片
```void
print
(int x,
int y)
//遞迴列印
bfs介紹
廣度優先演算法(breadth-first-search),簡稱bfs,是一種圖形搜尋演演算法。簡單的說,bfs是從根節點開始,沿著樹的寬度遍歷樹的節點,如果發現目標,則演算終止。
演算法分析
bfs是和dfs一樣,屬於盲目搜尋,bfs會遍歷所有的節點,但是bfs是一點為中心向周圍擴散,以起點開始,每一層外層為乙個層級,因此當找到終點時,終點所處的層級為最小級數,即是最段路徑
**
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace std;
int map[
100]
[100];
int vis[
100]
[100];
int dis[
100]
[100];
int dx=
;int dy=
;struct node
pre[
100]
[100];
queue q;
int m, n;
bool flag =
false
;char mark[10]
[10];
void
bfs()}
}}}void
print
(int x,
int y)
//遞迴列印
intmain()
else
cout << endl;
}
執行結果
練習題列印迷宮最短路徑
定義乙個二維陣列: map[5][5]
它表示乙個迷宮,其中的1表示牆壁,0表示可以走的路,只能橫著走或豎著走,不能斜著走,要求程式設計序找出從左上角到右下角的最短路線。
input
乙個5 × 5的二維陣列,表示乙個迷宮。資料保證有唯一解。
output
左上角到右下角的最短路徑,格式如樣例所示。
sample input
0 1 0 0 0
0 1 0 1 0
0 0 0 0 0
0 1 1 1 0
0 0 0 1 0
sample output
(0, 0)
(1, 0)
(2, 0)
(2, 1)
(2, 2)
(2, 3)
(2, 4)
(3, 4)
(4, 4)
ac**
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace std;
int map[
100]
[100];
int vis[
100]
[100];
int dis[
100]
[100];
int dx=
;int dy=
;struct node
pre[
100]
[100];
queue q;
int m, n;
void
bfs()}
}}void
print
(int x,
int y)
//遞迴列印
intmain()
資料結構 BFS
圖 演算法思想 判斷圖中從vi到vj是否有路徑,可以採取遍歷的方法。遍歷的起點為vi,在一次bfs退出之前遇到vj,則證明有路徑,否則沒有路徑。演算法思想 判斷頂點r到g中的每個頂點是否有路徑可達,可以通過深度優先搜尋遍歷的方法。以r為起點進行深度優先搜尋遍歷,若dfs 函式退出之前已經訪問過所有頂...
資料結構實驗
資料結構實驗 寫乙個學生管理系統 如下 define overflow 1 define ok 1 define error 1 define maxsize 6 define increment 10 include include include include typedef int stat...
資料結構實驗
資料結構實驗 實驗一 順序表的實現及應用 實驗一 順序表的實現及應用 一 實驗實習目的及要求 了解和掌握線性表的順序儲存結構 掌握用c語言上機除錯線性表的基本方法 掌握線性表的基本操作 插入 刪除 查詢以及線性表合併等運算在順序儲存結構和鏈結儲存結構上的運算,以及對相應演算法的效能分析。二 實驗實習...