迪傑斯特拉演算法

2021-08-27 13:43:08 字數 1477 閱讀 1246

迪傑斯特拉演算法用來計算圖中某一點其他點最短距離,這個圖可以是加權,也可以是無權的,距離指的是從一點到其它點所經過的邊的權重和;

假設現在有乙個加權無向圖,我們要求節點1到其他點的最短距離:

初始化圖arr:用乙個鄰接矩陣來表示一張圖,矩陣元素

初始化一維向量d,這個向量儲存的是其他點的最短距離,初始值設為圖中到其他點的距離。以上圖為例,節點1到其他點最短距離分別是d[0] = 0, d[1] = 7, d[2] = 9, d[3] = max, d[4] = max,d[5] = 14。

已經計算過的點的集合visited,這是個向量,用來儲存某個點是否訪問過過到的最短距離。

從向量d中尋找乙個距離最近而且沒被訪問過的點mark,以及最短距離min,將mark點標記為已訪問:visited[mark]=1。第一次迭代中,距離節點1最短距離的是節點2,距離為7,設定visited[1] = 1,min=7,mark=1。

調整其他沒被訪問過的點的最短距離,即更新向量d:如果到mark的最短距離(d[mark])加上圖上mark到

重複步驟4,5直到到所有節點的最短距離都被計算完,也就是重複節點個數次。

package test;

public class main ,,,

,,};for(int i = 0; i < 6; i++)

for(int j = 0; j < 6; j++)

if(arr[i][j] == -1)

arr[i][j] = integer.max_value;

//用來記錄某個節點是否計算過到v0的最短距離

int visited = new int[6];

//用來儲存v0到某一點的最短距離

long d = new long[6];

//初始化d

for(int i = 0; i < 6; i++)

d[i] = arr[0][i];

visited[0] = 1;

int mark = 0;

for(int i = 1; i < 6; i++)

visited[mark] = 1;

//根據上一步驟得到的最短距離,更新其他點到v0的最短距離

for(int j = 0; j < 6; j++)

}} for(long i : d)

system.out.println(i);

}}

迪傑斯特拉演算法

if object id t test is not null drop table t test gocreate table dbo t test id int identity 1,1 not null primary key,自增字段,無意義 header varchar 500 第一點的名...

迪傑斯特拉演算法

dijkstra 迪傑斯特拉 演算法是典型的最短路徑路由演算法,用於計算乙個節點到其他所有節點的最短路徑。主要特點是以起始點為中心向外層層擴充套件,直到擴充套件到終點為止。dijkstra演算法 能得出最短路徑的最優解,但由於它遍歷計算的節點很多,所以效率低。dijkstra演算法是很有代表性的最短...

迪傑斯特拉演算法

dijkstra演算法 單源最短路徑 每次找到離源點最近的乙個頂點,然後以該頂點為中心進行擴充套件,最終得到源點到其餘所有點的最短路徑。1.把所有的頂點分為兩部分 已知最短路程的頂點集合p和未知最短路徑的頂點集合q。最開始,p集合中只有源點乙個頂點,用visit i 陣列來記錄哪些點在集合p。vis...