/*
按路徑長度遞增次序產生演算法:
把頂點集合v分成兩組:
(1)s:已求出的頂點的集合(初始時只含有源點v0)
(2)v-s=t:尚未確定的頂點集合
將t中頂點按遞增的次序加入到s中,保證:
(1)從源點v0到s中其他各頂點的長度都不大於從v0到t中任何頂點的最短路徑長度
(2)每個頂點對應乙個距離值
s中頂點:從v0到此頂點的長度
t中頂點:從v0到此頂點的只包括s中頂點作中間頂點的最短路徑長度
依據:可以證明v0到t中頂點vk的,或是從v0到vk的直接路徑的權值;或是從v0經s中頂點到vk的路徑權值之和
(反證法可證)
求最短路徑步驟
演算法步驟如下:
g=1. 初始時令 s=,t=v-s=,t中頂點對應的距離值
若存在,d(v0,vi)為弧上的權值
若不存在,d(v0,vi)為∞
2. 從t中選取乙個與s中頂點有關聯邊且權值最小的頂點w,加入到s中
3. 對其餘t中頂點的距離值進行修改:若加進w作中間頂點,從v0到vi的距離值縮短,則修改此距離值
重複上述步驟2、3,直到s中包含所有頂點,即w=vi為止
*/#include
#include
#include
using
namespace
std;
const
int maxn = 107;
int dis[maxn][maxn];
const
int inf = 0x3f3f3f3f;
bool book[maxn];
int d[maxn];//表示目前探索出的最短邊
int main()
else
//inf不能太大,因為太大了做了乙個加法會溢位成負數}}
while (1)
//演算法思想:先找距離開始點最近的點,將於這個點相連的點到起始點的距離進行更新。
for (int i = 1; i <= n; i++)
book[1] = 1;
for (int i = 2; i <= n; i++)}}
}cout
<< d[n] << endl;
}return
0;}
這題雖然很水,但也是幫我複習了一下dij演算法
還剩997道,加油!!!
迪傑斯特拉演算法求最短路徑
include define infinity 10000 define true 1 define false 0 define vertex num 6 typedef struct graph graph void shortestpath graph g,int v0,int p verte...
迪傑斯特拉最短路徑
問題描述 在帶權有向圖g中,給定乙個源點v,求從v到g中的其餘各頂點的最短路徑問題,叫做單源點的最短路徑問題。在常用的單源點最短路徑演算法中,迪傑斯特拉演算法是最為常用的一種,是一種按照路徑長度遞增的次序產生最短路徑的演算法。在本題中,讀入乙個有向圖的帶權鄰接矩陣 即陣列表示 建立有向圖並按照以上描...
js迪傑斯特拉演算法求最短路徑
名詞解釋和下圖參考 double arr new double allvertices.count allvertices.count 矩陣 allvertices所有三維座標點的集合 lines 所有兩點的連線 dijkstra演算法 param sourcev 源點的索引,從0開始 param ...