求最短路徑

2021-10-09 06:24:01 字數 2296 閱讀 6485

從源點到終點的路徑可能存在三種情況:1. 沒有路徑 2. 只有一條路徑 3. 有多條路徑

思路:按照路徑長度遞增的次序從源點到終點的路徑。

假設gra

ph[]

[]

graph

graph[

][]為有向網的鄰接矩陣,s

ss為已找到最短路徑結點的集合,其初始狀態為只含乙個頂點,即源點。另設乙個一維陣列dis

t[n]

dist[n]

dist[n

],其中每個分量表示當前所找到的從源點出發(經過集合s中的頂點)到各個終點的最短路徑長度。顯然,dis

tdist

dist

的初值為:

d is

t[k]

=gra

ph[i

][k]

dist[k] = graph[i][k]

dist[k

]=gr

aph[

i][k

]1選擇u

uu,使得

d is

t[u]

=min

dist[u] = min\

dist[u

]=minuu

u為目前找到的從源點出發的最短路徑的結點。將這些結點u

uu併入集合sss。

修改d is

tdist

dist

陣列中所有尚未找到最終路徑的結點的對應分量值。如果gra

ph[u

][w]

graph[u][w]

graph[

u][w

]為有限值,即從頂點u

uu到頂點w

ww有弧存在,並且

d is

t[u]

+gra

ph[u

][w]

st[w

]dist[u]+graph[u][w] < dist[w]

dist[u

]+gr

aph[

u][w

]st[w

]則令:

d is

t[w]

=dis

t[u]

+gra

ph[u

][w]

dist[w] = dist[u] + graph[u][w]

dist[w

]=di

st[u

]+gr

aph[

u][w

]重複上述(2)和(3)的操作n-1次,即可求得從源點到所有終點的最短路徑。

思路:copy自這個部落格

#include

#include

using

namespace std;

void

dijkstra

(int n,

int s,

const vectorint>

>

&g, vector<

int>

&prev)

else

} s[s]

=true

; dist[s]=0

;// find next path for the shortest path

int u;

// next

int value = int_max;

for(

int i =

0; i < n; i++)}

// update

for(

int i =

0; i < n; i++)}

}}void

searchpath

(const vector<

int>

& prev,

int s,

int e)

rpath.

push_back

(s);

for(

auto it = rpath.

rbegin()

; it != rpath.

rend()

;it++)}

intmain()

dijkstra

(n, st, g, prev)

;int t;

cin >> t;

while

(t--

)}

i

ii為源點在途中的序號 ↩︎

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

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

求最短路徑(dijkstra)

因為要做一道題牽扯到最小路徑的演算法,所以就看了看締結斯特拉演算法。看了演算法導論上面的介紹不明白,只好下了乙個 自己去看。單源圖最短路徑求法 int dijkstra int from,int to int map n s u 1 for i 0 i 看了之後自己總結的一點點的經驗 締結斯特拉演算...

Dijkstra求最短路徑

把m1.txt與可執行檔案放在統一路徑下 m1.txt 距離矩陣,9行9列 的資料如下 9999 6 3 1 9999 9999 9999 9999 9999 9999 9999 9999 9999 1 9999 9999 9999 9999 9999 2 9999 2 9999 9999 9999...