(C )BFS求最短路長度及最短路徑

2021-09-29 05:57:35 字數 1446 閱讀 8921

在一張由0, 1構成的圖中,1表示障礙,0表示通路

給定起點s和終點t

求從s到t的最短路長度並輸出路徑

首先bfs是由佇列實現和佇列先進先出的特性,

對於求最短路長度,我們可以從終點t開始倒著搜尋,

用乙個陣列dist表示每個點到終點t的最短路徑,

如果乙個點能由上乙個點一步走到,則將該點入隊,直到隊列為空即遍歷完所有的點。

對於求路徑,可以在dist陣列的基礎上,從起點開始搜尋,

如果有一點能由當前點一步走到,則該點一定在最短路徑上。

#include

#include

#include

using

namespace std;

const

int maxn =

1010

;char mp[maxn]

[maxn]

;//存放地圖

int dist[maxn]

[maxn]

;//距離矩陣 記錄各個點到終點的最短路長度

int n;

int sx, sy, tx, ty;

//記錄起止點的橫縱座標

int dx[4]

=, dy[4]

=;//用來方便往四個方向走

char dir[4]

=;void

bfs()}

}}intmain()

if(mp[i]

[j]==

't')}}

bfs();

//開始搜尋

cout << dist[sx]

[sy]

<< endl;

//起點到終點的最短路長度

可以修改的地方有很多,這裡主要說一種修改的輸出方式

只需要修改main函式中遍歷輸出的部分即可

**如下

int x = sx, y = sy

cout <<

"("<< x <<

", "

<< y <<

")"<< endl;

while

(x != tx || y != ty)}}

}

結果如下

迷宮問題(求最短路徑長度和最短路徑)

描述 定義乙個二維陣列 int maze 5 5 它表示乙個迷宮,其中的1表示牆壁,0表示可以走的路,只能橫著走或豎著走,不能斜著走,要求程式設計序找出從左上角到右下角的最短路線。輸入乙個5 5的二維陣列,表示乙個迷宮。資料保證有唯一解。輸出左上角到右下角的最短路徑,格式如樣例所示。樣例輸入 0 1...

最短路 求最長最短路,求最短路的路徑

hdu 1595 find the longest of the shortest include include include include include include include include include include include include include defi...

求最短路徑

從源點到終點的路徑可能存在三種情況 1.沒有路徑 2.只有一條路徑 3.有多條路徑 思路 按照路徑長度遞增的次序從源點到終點的路徑。假設gra ph graph graph 為有向網的鄰接矩陣,s ss為已找到最短路徑結點的集合,其初始狀態為只含乙個頂點,即源點。另設乙個一維陣列dis t n di...