最短路徑迪傑斯特拉模板

2022-05-13 11:43:34 字數 1046 閱讀 3099

#include

using namespace std;

const int maxnum = 100;

const int maxint = 999999;

void dijkstra(int n, int v, int *dist, int *prev, int c[maxnum][maxnum])

dist[v] = 0;

s[v] = 1;

// 依次將未放入s集合的結點中,取dist最小值的結點,放入結合s中

// 一旦s包含了所有v中頂點,dist就記錄了從源點到所有其他頂點之間的最短路徑長度

for(int i=2; i<=n; ++i)

que[tot] = v;

for(int i=tot; i>=1; --i)

if(i != 1)

cout << que[i] << " -> ";

else

cout << que[i] << endl;

}int main()

}dijkstra(n, 1, dist, prev, c);

// 最短路徑長度

cout << "源點到最後乙個頂點的最短路徑長度: " << dist[n] << endl;

// 路徑

cout << "源點到最後乙個頂點的路徑為: ";

searchpath(prev, 1, n);}5

71 2 10

1 4 30

1 5 100

2 3 50

3 5 10

4 3 20

4 5 60

輸出資料:

999999 10 999999 30 100

10 999999 50 999999 999999

999999 50 999999 20 10

30 999999 20 999999 60

100 999999 10 60 999999

源點到最後乙個頂點的最短路徑長度: 60

源點到最後乙個頂點的路徑為: 1 -> 4 -> 3 -> 5

迪傑斯特拉最短路徑

問題描述 在帶權有向圖g中,給定乙個源點v,求從v到g中的其餘各頂點的最短路徑問題,叫做單源點的最短路徑問題。在常用的單源點最短路徑演算法中,迪傑斯特拉演算法是最為常用的一種,是一種按照路徑長度遞增的次序產生最短路徑的演算法。在本題中,讀入乙個有向圖的帶權鄰接矩陣 即陣列表示 建立有向圖並按照以上描...

迪傑斯特拉模板出來了

includeusing namespace std const int maxx 105 const int inf 1000000 int map maxx maxx bool used maxx intdis maxx intmapsize void init int c for x 0 x ...

最短路徑 迪傑斯特拉演算法

例如,要求下圖v0到v8的最短路徑 所以我們可以找到這樣的一條最短路徑 下面是他的鄰接矩陣 偽 如下 define maxvex 9 define infinity 65535 typedef int patharc maxvex 用於儲存最短路徑下標的陣列 typedef int shortpat...