單源最短路徑 貪心算法.doc

單源最短路徑 貪心算法.doc

ID:59300080

大小:48.00 KB

頁數(shù):3頁

時間:2020-09-06

單源最短路徑 貪心算法.doc_第1頁
單源最短路徑 貪心算法.doc_第2頁
單源最短路徑 貪心算法.doc_第3頁
資源描述:

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

1、實(shí)驗(yàn)三單源最短路徑一、實(shí)驗(yàn)?zāi)康募耙?掌握貪心算法的基本思想?用c程序?qū)崿F(xiàn)單源最短路徑的算法?二、實(shí)驗(yàn)環(huán)境?Window下的vc?2010三、實(shí)驗(yàn)內(nèi)容?1、有向圖與單源點(diǎn)最短路徑?2、按路徑長度非降的次序依次求各節(jié)點(diǎn)到源點(diǎn)的最?短路徑?3、Dijkstra算法四、算法描述及實(shí)驗(yàn)步驟???設(shè)給定源點(diǎn)為Vs,S為已求得最短路徑的終點(diǎn)集,開始時令S={Vs}?。當(dāng)求得第一條最短路徑(Vs?,Vi)后,S為{Vs,Vi}?。根據(jù)以下結(jié)論可求下一條最短路徑。?設(shè)下一條最短路徑終點(diǎn)為Vj?,則Vj只有:源點(diǎn)到終點(diǎn)有直接的弧?;從Vs?出發(fā)到Vj?的這條最短路徑所經(jīng)過的所有中間頂點(diǎn)必定在S中。

2、即只有這條最短路徑的最后一條弧才是從S內(nèi)某個頂點(diǎn)連接到S外的頂點(diǎn)Vj?。???若定義一個數(shù)組dist[n],其每個dist[i]分量保存從Vs?出發(fā)中間只經(jīng)過集合S中的頂點(diǎn)而到達(dá)Vi的所有路徑中長度最小的路徑長度值,則下一條最短路徑的終點(diǎn)Vj必定是不在S中且值最小的頂點(diǎn),?即:dist[i]=Min{?dist[k]

3、?Vk∈V-S?}?利用公式就可以依次找出下一條最短路徑。?在程序中c[][]表示帶權(quán)鄰接矩陣?,??dist[]表示頂點(diǎn)到源點(diǎn)的最短路徑?,??p[]記錄頂點(diǎn)到源點(diǎn)最短路徑的前驅(qū)節(jié)點(diǎn)?,??u源點(diǎn),函數(shù)Way是遞歸的構(gòu)造出最短路徑的次序。??五、實(shí)驗(yàn)結(jié)果?程序執(zhí)行的結(jié)果:六、源

4、代碼#include#includeusingnamespacestd;#defineMAX999voidgetdata(int**c,intn){inti,j;intbegin,end,weight;for(i=1;i<=n;i++){for(j=1;j<=n;j++){if(i==j)c[i][j]=0;elsec[i][j]=MAX;}}do{cout<<"請輸入起點(diǎn)終點(diǎn)權(quán)值(-1退出):";cin>>begin;if(begin==-1)break;cin>>end>>weight;c[begin][end]=weight;}while(begi

5、n!=-1);}voidDijkstra(intn,intv,int*dist,int*prev,int**c){bools[MAX];inti,j;for(i=1;i<=n;i++){dist[i]=c[v][i];//從源點(diǎn)到各點(diǎn)的值s[i]=false;if(dist[i]==MAX)prev[i]=0;//最大值沒有路徑elseprev[i]=v;//前驅(qū)為源點(diǎn)}dist[v]=0;s[v]=true;for(i=1;i<=n;i++){inttemp=MAX;intu=v;for(j=1;j<=n;j++)if((!s[j])&&(dist[j]

6、st[j];}//不在集合里,值《temp,選最小值s[u]=true;for(j=1;j<=n;j++){if((!s[j])&&(c[u][j]1;i--){path[i]=pre

7、v[path[i+1]];//構(gòu)造路徑m--;}for(i=m;i<=end;i++){cout<";//輸出路徑}cout<<"bb"<<""<>n;int*dist=newint[n+1];int*prev=newint[n+1];int**c;c=newint*[n+1];for(i=0;i<=n;i++){c[i]=newint[n+1];}getdata(c,n);//獲取數(shù)據(jù)intbegin=1,end;cout<<"請輸入所求單源路徑的起點(diǎn)終點(diǎn):

8、";cin>>begin>>end;v=begin;Dijkstra(n,v,dist,prev,c);//計(jì)算路徑PrintPath(prev,n,begin,end);//輸出路徑system("pause");}

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

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

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