Matlab基礎:最短路徑問題_第1頁
Matlab基礎:最短路徑問題_第2頁
Matlab基礎:最短路徑問題_第3頁
Matlab基礎:最短路徑問題_第4頁
Matlab基礎:最短路徑問題_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、最短路徑問題,Mathematica Modeling,參考書: 1.傅鸝 龔劬 劉瓊蓀 何中市 數(shù)學實驗科學出版社 2.張紹民 李淑華 數(shù)據(jù)結(jié)構(gòu)教程C語言版中國電力出版社,主要內(nèi)容,Floyd算法,Dijkstra算法,兩個例子的求解,引例2:最廉價航費表的制定,引例1:最短運輸路線問題,3,如圖的交通網(wǎng)絡,每條弧上的數(shù)字代表車輛在該路段行駛所需的時間,有向邊表示單行道,無向邊表示可雙向行駛。若有一批貨物要從1號頂點運往11號頂點,問運貨車應沿哪條線路行駛,才能最快地到達目的地?,引例1:最短運輸路線問題,4,某公司在六個城市C1,C2,C3,C4,C5,C6都有分公司,公司成員經(jīng)常往來于它

2、們之間,已知從Ci到Cj的直達航班票價由下述矩陣的第i行,第j列元素給出(表示無直達航班),該公司想算出一張任意兩個城市之間的最廉價路線航費表。,引例2:最廉價航費表的制定,5,最短路徑問題,定義:設P(u,v)是加權(quán)圖G中從u到v的路徑,則該路徑上的邊權(quán)之和稱為該路徑的權(quán),記為w(P). 從u到v的路徑中權(quán)最小者 P*(u,v)稱為u到v的最短路徑.,最短路徑算法,Dijkstra算法 使用范圍: 尋求從一固定頂點到其余各點的最短路徑; 有向圖、無向圖和混合圖; 權(quán)非負. 算法思路: 采用標號作業(yè)法,每次迭代產(chǎn)生一個永久標號, 從而生長一顆以v0為根的最短路樹,在這顆樹上每個頂點與根節(jié)點之間

3、的路徑皆為最短路徑.,Dijkstra算法算法步驟,S: 具有永久標號的頂點集; l(v): v的標記; f(v):v的父頂點,用以確定最短路徑; 輸入加權(quán)圖的帶權(quán)鄰接矩陣w=w(vi,vj)nxm. 初始化 令l(v0)=0,S=; vv0 ,l(v)=; 更新l(v), f(v) 尋找不在S中的頂點u,使l(u)為最小.把u加入到S中,然后對所有不在S中的頂點v,如l(v)l(u)+w(u,v),則更新l(v),f(v), 即 l(v)l(u)+w(u,v),f(v)u; 重復步驟2), 直到所有頂點都在S中為止.,MATLAB程序(Dijkstra算法),function min,pat

4、h=dijkstra(w,start,terminal) n=size(w,1); label(start)=0; f(start)=start; for i=1:n if i=start label(i)=inf; end, end s(1)=start; u=start; while length(s)(label(u)+w(u,v) label(v)=(label(u)+w(u,v); f(v)=u; end, end, end,v1=0; k=inf; for i=1:n ins=0; for j=1:length(s) if i=s(j) ins=1; end, end if ins

5、=0 v=i; if klabel(v) k=label(v); v1=v; end, end, end s(length(s)+1)=v1; u=v1; end,min=label(terminal); path(1)=terminal; i=1; while path(i)=start path(i+1)=f(path(i); i=i+1 ; end path(i)=start; L=length(path); path=path(L:-1:1);,9,最短路徑算法,Dijkstra算法程序的使用說明: 調(diào)用格式為 min,path=dijkstra(w,start,terminal),

6、其中輸入變量w為所求圖的帶權(quán)鄰接矩陣,start, terminal分別為路徑的起點和終點的號碼。返回start到terminal的最短路徑path及其長度min. 注意:頂點的編號從1開始連續(xù)編號。,最短路徑算法,Floyd算法 使用范圍: 求每對頂點的最短路徑; 有向圖、無向圖和混合圖; 算法思想: 直接在圖的帶權(quán)鄰接矩陣中用插入頂點的方法依次遞推地構(gòu)造出n個矩陣D(1), D(2), , D(n), D(n)是圖的距離矩陣, 同時引入一個后繼點矩陣記錄兩點間的最短路徑.,Floyd算法算法步驟,d(i,j) : i到j的距離; path(i,j): i到j的路徑上i的后繼點; 輸入帶權(quán)鄰

7、接矩陣a(i,j). 1)賦初值 對所有i,j, d(i,j)a(i,j) , path(i,j)j,k=l. 2)更新d(i,j) , path(i,j) 對所有i,j, 若d(i,k)+d(k,j)d(i,j),則 d(i,j)d(i,k)+d(k,j) , path(i,j)path(i,k) , k k+1 3)重復2)直到k=n+1,MATLAB程序(Floyd算法),function D,path,min1,path1=floyd(a,start,terminal) D=a;n=size(D,1);path=zeros(n,n); for i=1:n for j=1:n if D(

8、i,j)=inf path(i,j)=j; end, end, end for k=1:n for i=1:n for j=1:n if D(i,k)+D(k,j)D(i,j) D(i,j)=D(i,k)+D(k,j); path(i,j)=path(i,k); end, end, end,end,if nargin=3 min1=D(start,terminal); m(1)=start; i=1; path1= ; while path(m(i),terminal)=terminal k=i+1; m(k)=path(m(i),terminal); i=i+1; end m(i+1)=te

9、rminal; path1=m; end,13,最短路徑算法,Floyd算法程序的使用說明: 1. D, path=floyd(a), 返回矩陣D, path 。其中a是所求圖的帶權(quán)鄰接矩陣,D(i,j)表示i到j的最短距離; path(i,j)表示i與j之間的最短路徑上頂點i的后繼點. 2. D, path, min1, path1= floyd(a,i,j) 返回矩陣D, path; 并返回i與j之間的最短距離min1和最短路徑path1.,14,edge= 2,3,1,3,3,5,4, 4,1,7,6,6,5, 5,11, 1,8,6,9,10,8,9, 9,10;. 3,4,2,7,5

10、,3,5,11,7,6,7,5,6,11, 5, 8,1,9,5,11,9,8,10,9;. 3,5,8,5,6,6,1,12,7,9,9,2,2,10,10,8,8,3,7, 2, 9,9, 2, 2; n=11; weight=inf*ones(n, n); for i=1:n weight(i, i)=0; end for i=1:size(edge,2) weight(edge(1, i), edge(2, i)=edge(3, i); end dis, path=dijkstra(weight, 1, 11),引例1的Matlab求解,15,運行上頁程序輸出: dis = 21 pa

11、th = 1 8 9 10 11 因此頂點1到頂點11的最短路徑為18 9 10 11, 其長度為21。,引例1的求解,16,建立腳本m文件如下: a= 0,50,inf,40,25,10;50,0,15,20,inf,25;inf,15,0,10,20,inf; 40,20,10,0,10,25;25,inf,20,10,0,55;10,25,inf,25,55,0; D, path=floyd(a) 運行便可輸出結(jié)果。,引例2的Matlab求解,運行輸出結(jié)果: D = 0 35 45 35 25 10 35 0 15 20 30 25 45 15 0 10 20 35 35 20 10 0 10 25 25 30 20 10 0

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論