# 單源最短路徑演算法 - dijkstra演算法
標籤(空格分隔): 演算法
這是乙個貪心演算法,每次新擴充套件乙個路程最短的點,更新與其相鄰的點的路程。
這個演算法可以解決單源最短路徑問題,這裡是從第乙個點開始到其他點的最短路徑。
不能有負權邊,因為擴充套件到負權邊的時候會產生更短的路程,有可能就破壞了已經更新的點路程不會改變的性質。
時間複雜度 o(n^2),使用鄰接表表示圖,絕大部分情況下能降低時間複雜度,具體看pdf,我也沒怎麼看懂。
/**
* 單源最短路徑演算法
* dijkstra演算法
* 時間複雜度 o(n^2)
* by jtahstu at 2017-09-18
*/#include #include using namespace std;
int main() , dis[11] = , book[11] = ;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
if (i == j)
e[i][j] = 0;
else
e[i][j] = int_max;
int a, b, c;
for (int i = 1; i <= m; i++)
for (int i = 1; i <= n; ++i)
book[1] = 1;
int min, u;
for (int i = 1; i <= n - 1; ++i)
}book[u] = 1; //標記該點最短路徑值已經確定
for (int v = 1; v <= n; v++)
}for (int i = 1; i <= n; i++)
cout << dis[i] << " ";
return0;}
/**6 8
1 2 1
1 3 2
2 3 3
2 4 3
2 5 1
3 4 5
4 6 2
5 6 1
0 1 2 4 2 3
6 91 2 1
1 3 12
2 3 9
2 4 3
3 5 5
4 3 4
4 5 13
4 6 15
5 6 4
0 1 8 4 13 17
*/
單源最短路徑演算法
簡單介紹 最短路徑演算法是圖演算法中的經典演算法,是用於解決圖中某個頂點到另外乙個頂點所經過路徑的花銷最小 這裡的花銷可能是時間也可能指費用等 dijkstra是用於解決單源最短路徑的經典演算法。圖的儲存方式 鄰接矩陣 在鄰接矩陣中,要獲取某個結點的出度和入讀,是通過掃瞄結點所在臨界矩陣中的行列完成...
單源最短路徑
include define max 999 define maxverts 10 typedef struct graph void chushi graph g void dij graph int key,int int int main for i 1 i g.numverts i dij ...
單源最短路徑
最優子結構 最短路徑的子路徑也是最短路徑,動態規劃和貪心演算法的乙個重要指標。環路 一條最短路徑不可能包含環路 1 環路權重為負,如果有一條環路權重為負,則不存在最短路徑 2 環路權重為零,如果包含該環路,則將該環路去掉即可 3 環路權重為正,去掉改環路可以得到更短的路徑,因此不可能是最短路徑 最短...