單源最短路徑

單源最短路徑

ID:44359783

大?。?12.50 KB

頁數(shù):20頁

時(shí)間:2019-10-21

單源最短路徑_第1頁
單源最短路徑_第2頁
單源最短路徑_第3頁
單源最短路徑_第4頁
單源最短路徑_第5頁
資源描述:

《單源最短路徑》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。

1、單源最短路徑xie_dream給定帶權(quán)有向圖G=(V,E)和源點(diǎn)u,求從點(diǎn)u到其他各頂點(diǎn)的最短距離Dijkstra算法基本思想是:設(shè)置一個(gè)集合S存放已經(jīng)找到最短路徑的頂點(diǎn),S的初始狀態(tài)只包含源點(diǎn)u,設(shè)置另一個(gè)集合T,T=V-S,存儲(chǔ)原圖中不在S集中的點(diǎn),即S的補(bǔ)集。假設(shè)從源點(diǎn)u到vi的有向邊為最短路徑,以后每求得一條最短路徑v,…,vk就將vk加入集合S中,并將路徑v,…vk,vi與原來的假設(shè)相比較,取路徑長(zhǎng)度較小者為最短路徑。重復(fù)上述過程,直到集合V中全部頂點(diǎn)加入到集合S中STuviSTuvivkST

2、uvivkuv2v3v4v133512992S集合紅線右側(cè)全為T集合1)先假設(shè)v1,v2,v3,v4與u相連的邊就是最短路徑dist[v1]=3,dist[v2]=2;dist[3]=9;dist[4]=10v2v3v4v1331012992S集合uu2)找一個(gè)離u最近的點(diǎn)加入S集合(這里是不是有點(diǎn)象前一講中的MST的Prim算法),即為v2v2v3v4v1331012992S集合u2)找一個(gè)離u最近的點(diǎn)加入S集合(這里是不是有點(diǎn)象前一講中的MST的Prim算法),即為v2v2v3v4v13310129

3、92S集合u再用v2去檢查從v2可到達(dá)的點(diǎn)的原先的所有假設(shè)發(fā)現(xiàn)dist[v4]>dist[v2]+g[v2][v4],更新dist[v4]v2v3v4v1331012992S集合u3)按上一步同樣的方法找到v1加入到S集合中v2v3v4v1331012992S集合u3)按上一步同樣的方法找到v1加入到S集合中v2v3v4v1331012992S集合u4)按上一步同樣的方法找到v4加入到S集合中,這時(shí)dist[v3]=9

4、t[v4]=4了!v2v3v4v1331012992S集合u5)4加入S集合中,同樣發(fā)現(xiàn)dist[v3]>dist[v4]+g[v4][v3],更新!v2v3v4v1331012992S集合u算法實(shí)現(xiàn)過程1,初始化dist[]和color[]2,while(s集合中的元素個(gè)數(shù)小于n)在dist[]中求最小值,并同樣記錄下標(biāo)k用dist[k]去修改k一步直接可達(dá)的點(diǎn)的dist[]將頂點(diǎn)k放入S集合中,染為紫色詳細(xì)代碼/*Author:PrimeMusic_FanCreatedon2010年4月29日,下午

5、1:46*/#include#include#definearr110#defineblue0#definepurple1#definemax_int214748364intn;//thenumberofvertexsintm;//thenumberofedgesintg[arr][arr];//g[i][j]indicatesthedistancebetweeniandjintpath[arr];//path[i]recordtheshorestpathfroms

6、ourceutoiintdist[arr];//dist[i]indicatestheshortestdistancefromutoiintst;//thesourcevertexintcolor[arr];//colorthevertexvoidDijkstra(intst){for(inti=1;i<=n;++i){color[i]=blue;dist[i]=g[st][i];//先假設(shè)源點(diǎn)u到其他點(diǎn)的直接相連邊的長(zhǎng)度就為最短距離path[i]=st;//假設(shè)都是從u直接通過一條有向邊到達(dá)}dist

7、[st]=0;color[st]=purple;intnumS=1;//S集合中元素的個(gè)數(shù),已經(jīng)加入了源點(diǎn),所以為1while(numS++dist[i]){minDis=dist[i];k=i;}}//print

8、f("k=%d",k);if(k==-1)//說明找不到與源點(diǎn)相連的點(diǎn),算法結(jié)束break;color[k]=purple;//找到點(diǎn)k,加入S集合中,并染為紫色//下一步,用dist[k]去檢查原先的所有不在S集合,即T集合中所有點(diǎn)的假設(shè)for(inti=1;i<=n;++i){if(color[i]==purple)continue;if(dist[i]>dist[k]+g[k][i]){//通過點(diǎn)k可以使源點(diǎn)到i點(diǎn)的距離變小,更新

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。