日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > MAC >内容正文

MAC

dijkstr算法步骤(dijkstr算法)

發布時間:2023/11/12 MAC 43 博士
生活随笔 收集整理的這篇文章主要介紹了 dijkstr算法步骤(dijkstr算法) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

大家好!今天讓小編來大家介紹下關于dijkstr算法步驟(dijkstr算法)的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。

您好,今天芳芳來為大家解答以上的問題。dijkstra算法步驟,dijkstra算法相信很多小伙伴還不知道,現在讓我們一起來看看吧!

1、[問題分析] 對于一個含有n個頂點和e條邊的圖來說,從某一個頂點Vi到其余任一頂點Vj的最短路徑,可能是它們之間的邊(Vi,Vj),也可能是經過k個中間頂點和k+1條邊所形成的路徑(1≤k≤n2)。

2、下面給出解決這個問題的Dijkstra算法思想。

3、 設圖G用鄰接矩陣的方式存儲在GA中,GA[i,j]=maxint表示Vi,Vj是不關聯的,否則為權值(大于0的實數)。

4、設集合S用來保存已求得最短路徑的終點序號,初始時S=[Vi]表示只有源點,以后每求出一個終點Vj,就把它加入到集合中并作為新考慮的中間頂點。

5、設數組dist[1..n]用來存儲當前求得的最短路徑,初始時Vi,Vj如果是關聯的,則dist[j]等于權值,否則等于maxint,以后隨著新考慮的中間頂點越來越多,dist[j]可能越來越小。

6、再設一個與dist對應的數組path[1..n]用來存放當前最短路徑的邊,初始時為Vi到Vj的邊,如果不存在邊則為空。

7、 執行時,先從S以外的頂點(即待求出最短路徑的終點)所對應的dist數組元素中,找出其值最小的元素(假設為dist[m]),該元素值就是從源點Vi到終點Vm的最短路徑長度,對應的path[m]中的頂點或邊的序列即為最短路徑。

8、接著把Vm并入集合S中,然后以Vm作為新考慮的中間頂點,對S以外的每個頂點Vj,比較dist[m]+GA[m,j]的dist[j]的大小,若前者小,表明加入了新的中間頂點后可以得到更好的方案,即可求得更短的路徑,則用它代替dist[j],同時把Vj或邊(Vm,Vj)并入到path[j]中。

9、重復以上過程n2次,即可在dist數組中得到從源點到其余各終點的最段路徑長度,對應的path數組中保存著相應的最段路徑。

10、 下面給出具體的Dijkstra算法框架(注:為了實現上的方便,用一個一維數組s[1..n]代替集合S,用來保存已求得最短路徑的終點集合,即如果s[j]=0表示頂點Vj不在集合中,反之,s[j]=1表示頂點Vj已在集合中)。

11、 Procedure Dijkstra(GA,dist,path,i); {表示求Vi到圖G中其余頂點的最短路徑,GA為圖G的鄰接矩陣,dist和path為變量型參數, 其中path的基類型為集合} Begin For j:=1 To n Do Begin {初始化} If j<>i Then s[j]:=0 Else s[j]:=1; dist[j]:=GA[i,j]; If dist[j]i Then s[m]:=1 else exit; {若條件成立,則把Vm加入到S中, 否則退出循環,因為剩余的終點,其最短路徑長度均為maxint,無需再計算下去} For j:=1 To n Do {對s[j]=0的更優元素作必要修改} If (s[j]=0) and (dist[m]+GA[m,j]

12、首先來分析Dijkstra的算法思想設圖G用鄰接矩陣的方式存儲在GA中,GA[I,j]=maxint表示vi,vj是不關聯的,否則為權值(大于0的實數)。

13、設集合S用來存儲保存已求得最短路徑的終點序號,初始時S=[vi]表示只有源點,以后每求出一個終點vj,就把它加入到集合中并作為新考慮的中間頂點。

14、設數組dist[1..n]用來存儲當前求得的最短路徑,初始時vi,vj如果是關聯的,則dist[j]等于權值,否則等于maxint,以后隨著新考慮的中間頂點越來越多,dist[j]可能越來越小。

15、再設一個與dist對應的數組path[1..n]用來存放當前最短路徑的邊,初始時vi到vj的邊,如果不存在邊則為空。

16、執行時,先從S以外的頂點(即待求出最短路徑的終點)所對應的dist數組元素中,找出其值最小的元素(假設為dist[m]),該元素值就是從源點vi到終點vm的最短路徑長度,對應的path[m]中的頂點或邊的序列即為最短路徑。

17、接著把vm并入集合S中,然后以vm作為新考慮的中間頂點,對S以外的每個頂點vj,比較dist[m]+GA[i,j]與dist[j]的大小,若前者小,表明加入了新的中間頂點后可以得到更好的方案,即可求得更短的路徑,則用它代替dist[j],同時把vj或邊(vm,vj)并入到path[j]中。

18、重復以上過程n2次,即可在dist數組中得到從源點到其余個終點的最短路徑長度,對應的path數組中保存著相應的最短路徑。

19、為了實現上的方便,用一個一維數組s[1..n]代替集合s,用來保存已求得最短路徑的終點集合,即如果s[j]=0表示頂點vj不在集合中,反之,s[j]表示頂點vj已在集合中)。

20、Procedure dijkstra (GA,dist path,I) begin for j:= 1 to n do begin if j<>I then s[j]:=0;{j不在集合中} else s[j]:=1;{j在集合中}; dist[j]:=GA[I,J];IF dist [j]I then s[m]:=1 else exit;{若條件成立,則把Vm加入到s中,否則退出循環,因為剩余的終點,其最短路徑長度均為maxint,無需再計算下去} for j:=1 to n do {對s[j]=0的更優元素作必要修改}if (s[j]=0)and (dist[m]+GA[m,j]

本文就為大家分享到這里,希望小伙伴們會喜歡。

以上就是小編對于dijkstr算法步驟(dijkstr算法)問題和相關問題的解答了,dijkstr算法步驟(dijkstr算法)的問題希望對你有用!

總結

以上是生活随笔為你收集整理的dijkstr算法步骤(dijkstr算法)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。