1. 程式人生 > >Dijkstra演算法及其matlab實現

Dijkstra演算法及其matlab實現

目錄

圖的概念

圖論中的圖是由若干給定的點及連線兩點的線所構成的圖形,這種圖形通常用來描述某些事物之間的某種特定關係,用點代表事物,用連線兩點的線表示相應兩個事物間具有這種關係。
一個圖可以用數學語言描述為G(V(G),E(G))。V(vertex)指的是圖的頂點集,E(edge)指的是圖的邊集。一個圖可以使用頂點集和邊集來描述。

圖的分類

圖分為有向圖和無向圖,有向圖中的邊有起點端和終點端,而無向圖沒有指向,節點之間只有連線關係。
無向圖
這裡寫圖片描述

圖的矩陣表示

圖的矩陣描述常用的是鄰接矩陣法。
在無向圖中,鄰接矩陣 中的某個元素 cij 有兩個取值 0 和 1,當 i

節點和 j 節點相鄰連通時取 1,否則取 0。上面的無向圖的鄰接矩陣可以寫成如下的形式,可以發現無向圖的鄰接矩陣是一個對稱矩陣。

C=[0111010101110101010101010]
在有向圖中,鄰接矩陣 中的某個元素 cij 也有兩個取值 0 和 1,當以 i 節點為起點存在指向 j 節點的有向邊時取1,否則取 0。上面的有向圖的鄰接矩陣可以寫成如下的形式,可以發現有向圖的鄰接矩陣一般不是一個對稱矩陣。
C=[0111000101000100000100000]
若把鄰接矩陣中的元素1用節點間的距離代替,這時就稱這個圖為加權圖,對應的鄰接矩陣為加權鄰接矩陣。加權圖可以用來計算兩個節點之間的最短路等問題。

最短路問題和Dijkstra演算法

圖中具有最大長度的路稱為最長路,包含每個頂點的路稱為Hamilton路,兩點間距離最短的路稱為最短路。
其中,最短路可以使用Dijkstra演算法計算。該演算法的原理較為直觀,相關資料也可以查到,故不再贅述。
在Matlab中有可以計算最短路的函式,先用digraph生成加權圖,再用shortestpath計算最短路。
以下Matlab程式碼可以計算上面有向圖中節點 1 到 5 的最短路,path是最短路的路徑,distance是最短距離。

a = [1,1,1,2,2,3,4];                    % 起點節點
b = [2,3,4,3,5,4,5];                    % 終點節點
c = [3,2,2,1,3,4,3]; % 對應權值 g = digraph(a,b,c); % 建立圖 [path,distance] = shortestpath(g,1,5); % 計算最短路

另外,可以通過plot(g)繪製圖g。