最短路徑--dijkstra演算法
dijkstra演算法
:原理就是:以某乙個節點為源點,向到其他節點進行遍歷,尋找源點到各節點的最短路徑,
它需要對所有節點進行遍歷,所有當節點較多時,效率比較低。
迪科斯徹演算法使用了
廣度優先搜尋
解決非負權有向圖的單源
最短路徑問題
,演算法最終得到乙個
最短路徑樹。
樣例程式中是以v0
為源點的
迴圈次數
mindist[0]
mindist[1]
mindist[2]
mindist[3]
mindist[4]初始0
0010max
30100
10,110
1060
30100
20,1,330
1050
3090
30,1,3,220
1050
3060
40,1,3,2,440
1050
3060
列印次序:
0, 10, 50, 30, 60
第一次迴圈:v0-v1為10,然後對比 v0-v2 和 v0-v1-v2最小離是多少;v0-v2為最大值maxint,v0-v1-v2的最小距離是10 + 50 = 60; 修復最小距離60。
第二次迴圈:找到最小值 30,然後對比 v0 直接到 【與v3有連線的各點vn(2,4)】的距離,和 v0-v4-vn的距離。修復v0到vn的最小距離
package graph.dijkstra;
/** * created by xu on 14-3-15.
*/class node
public class dijkstra
for (int i = 0; i < length; i++)
paths[i][j] = weight;}}
//初始化邊連線
paths[0][1] = 10;
paths[0][3] = 30;
paths[0][4] = 100;
paths[1][2] = 50;
paths[2][4] = 10;
paths[3][2] = 20;
paths[3][4] = 60;
}public void calc()
nodes[0].isvisit = true;
for (int x = 1; x < length; x++)
}/* 1、選出最小距離節點v後。再看源節點v0 到 與 v 有連線的節點vn 的距離 會不會 比 vo 直接 到vn 的距離小。
2、有就修正v0 到 vn 的距離。
*/if (minindex > -1) }}
}for (int i = 0; i < length; i++)
}public static void main(string args)
}
Dijkstra最短路徑演算法
基本思路是 選擇出發點相鄰的所有節點中,權最小的乙個,將它的路徑設定為確定。其他節點的路徑需要儲存起來。然後從剛剛確認的那個節點的相鄰節點,算得那些節點的路徑長。然後從所有未確定的節點中選擇乙個路徑最短的設定為確定。重複上面步驟即可。void dijkstra graph g,string v fl...
Dijkstra最短路徑演算法
引入 dijkstra 迪傑斯特拉 演算法是典型的最短路徑路由演算法,用於計算乙個節點到其他所有節點的最短路徑。主要特點是以起始點為中心向外層層擴充套件,直到擴充套件到終點為止。dijkstra演算法能得出最短路徑的最優解,但由於它遍歷計算的節點很多,所以效率低。package dijkstra p...
最短路徑 Dijkstra演算法
最短路徑 描述 已知乙個城市的交通路線,經常要求從某一點出發到各地方的最短路徑。例如有如下交通圖 則從a出發到各點的最短路徑分別為 b 0c 10 d 50 e 30 f 60 輸入 輸入只有乙個用例,第一行包括若干個字元,分別表示各頂點的名稱,接下來是乙個非負的整數方陣,方陣維數等於頂點數,其中0...