天天看點

MATLAB之最優路徑的查找

                            求解最優路徑問題以一個例題引入

MATLAB之最優路徑的查找

這個例題是一個有向圖,在圖裡面已經标注了權值。在MATLAB裡面圖用矩陣表示,具體操作見下面:

step1,找出起始節點、終止節點、權值,這三個部分組成三個A、B、C向量,

A=[1  1  2  2  3  3  4  4  4  4  5  6  6  7  8];

B=[2  3  5  4  4  6  5  7  8  6  7  8  9  9  9];

C=[1  2 12 6  3  4  4 15 7  2  7  7 15 3 10];

利用系數矩陣生成函數sparse()函數将圖轉換為系數矩陣。

{

   注解:這裡先講解sparse()函數的利用方法

   S=sparse(i,j,s,m,n,nzmax) 這是完整的定義式,其中i,j, s,都是向量,i,j ,決定S的元素位置,向量s決定S的元素值,即S(i(k),j(k))=s(k), 最終生成的S是一個m*n的矩陣,nzmax決定S矩陣中非零元素的個數一般nzmax=length(s)。

}

R=sparse(A,B,C);

R(9,9)=0;

step2:

利用biography()函數将矩陣制成圖表形式

{

  注解:biography()函數的用法,biograghy(R,[],'ShowWeights','on');這裡矩陣R數值就是要制成表的路徑權值,如果R(i,j)=a!=0,則i——j路徑上權值就為a。

MATLAB之最優路徑的查找

上圖就是最終生成的向量圖。ShowWeights選項設定為on ,圖像裡面會顯示路徑權值。

如果要想顯示出上圖可以用view函數。

}

step3:

這一步就是利用graphshortestpath()函數找出最優路徑,一般[d,p]=graphshortestpath(R,1,9)

其中R代表将要搜尋的圖矩陣,1代表搜尋起始點,9代表搜尋終止節點。

d傳回值代表距離起點與終點間距離,p傳回值代表經過的節點。

                                     無向圖的最優路徑搜尋

MATLAB之最優路徑的查找