求解最優路徑問題以一個例題引入
這個例題是一個有向圖,在圖裡面已經标注了權值。在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。
上圖就是最終生成的向量圖。ShowWeights選項設定為on ,圖像裡面會顯示路徑權值。
如果要想顯示出上圖可以用view函數。
}
step3:
這一步就是利用graphshortestpath()函數找出最優路徑,一般[d,p]=graphshortestpath(R,1,9)
其中R代表将要搜尋的圖矩陣,1代表搜尋起始點,9代表搜尋終止節點。
d傳回值代表距離起點與終點間距離,p傳回值代表經過的節點。