求兩點間最短路的改進的Dijkstra演算法

2021-05-25 01:35:16 字數 740 閱讀 8163

%% *********求兩點間最短路的改進的dijkstra演算法***********

% 輸入: a表示圖的鄰接矩陣                                   //

% 輸出: a表示所求最短路的距離矩陣                           //

%%function a = dij2_m(a)

% 建立鄰接矩陣,若不是鄰接矩陣,則變為鄰接矩陣

n = length(a);

for i =2:n

for j= 1:(i-1)

a(i,j) = a(j,i)

endend

for k = 1:(n-1)

b = [1:(k-1),(k+1):n];

kk = length(b);

a_id = k;

b1= [(k+1):n];

kk1= length(b1);

while kk>0

for j=1:kk1

te= a(k,a_id) + a(a_id,b1(j));

if te k

miid1= find(b1 == a_id);

b1 = [b1(1:(miid1-1)) b1((miid1+1):kk1)];

kk1 = length(b1);

endend

for j = (k+1):n

a(j,k) = a(k,j);

endend

兩點間多條最短路徑

最短路徑的求法可能都知道,弗洛伊德和迪克斯特拉。這兩種方法都是求一條最短路徑,如果你想求多條最短路徑那就只能選擇其他方法了。網上已經有幾種演算法可以求多條最短路徑,最常見的就是刪邊法 迪克斯特拉。就是用狄克斯特拉求出一條最短路徑然後把最短路徑上的邊一條一條的刪除然後再求最短路徑。這個方法比較容易想但...

Dijstra求任意兩點間最短路徑並輸出

用迪傑斯特拉演算法求一點到其餘所有結點的最短路徑。先輸入乙個小於100的正整數n,然後輸入圖的鄰接矩陣 10000表示無窮大,即兩點之間沒有邊 最後輸入兩個0到n 1的整數表示兩個點。先用迪傑斯特拉演算法求給定的第乙個點到其餘所有結點的最短路徑。然後再輸出給定的兩個點之間的最短路徑 按順序輸出最短路...

Dijkstra演算法求兩點最短路徑

對於下圖使用dijkstra演算法求由頂點a到頂點h的最短路徑,按實驗報告模板編寫演算法。選取乙個起始點加入集合a,剩餘點加入集合b 計算集合b中的點到初始點的距離dis i 若不相鄰的距離無窮大,否則為權值 選取最小的dis i 計為dis x 並將點x加入集合a 更新和點x相鄰的點y的dis值 ...