Dijkstra演算法及其matlab實現
阿新 • • 發佈:2019-01-02
目錄
圖的概念
圖論中的圖是由若干給定的點及連線兩點的線所構成的圖形,這種圖形通常用來描述某些事物之間的某種特定關係,用點代表事物,用連線兩點的線表示相應兩個事物間具有這種關係。
一個圖可以用數學語言描述為G(V(G),E(G))。V(vertex)指的是圖的頂點集,E(edge)指的是圖的邊集。一個圖可以使用頂點集和邊集來描述。
圖的分類
圖分為有向圖和無向圖,有向圖中的邊有起點端和終點端,而無向圖沒有指向,節點之間只有連線關係。
圖的矩陣表示
圖的矩陣描述常用的是鄰接矩陣法。
在無向圖中,鄰接矩陣 C 中的某個元素 cij 有兩個取值 0 和 1,當 i
在有向圖中,鄰接矩陣 C 中的某個元素 cij 也有兩個取值 0 和 1,當以 i 節點為起點存在指向 j 節點的有向邊時取1,否則取 0。上面的有向圖的鄰接矩陣可以寫成如下的形式,可以發現有向圖的鄰接矩陣一般不是一個對稱矩陣。
若把鄰接矩陣中的元素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。