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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

最小生成树之prim

發(fā)布時(shí)間:2023/11/29 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 最小生成树之prim 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

prim是設(shè)置一個(gè)初始結(jié)點(diǎn),尋找其周圍最小的邊權(quán)值,并將該結(jié)點(diǎn)作為初始結(jié)點(diǎn),繼續(xù)尋找現(xiàn)在結(jié)點(diǎn)周圍的邊權(quán)值的最小值,但要注意如果這次尋找的某個(gè)邊權(quán)值沒(méi)有上次的小的話仍然保留上一次的邊權(quán)值,即lowcast的值將會(huì)不變。

1 #include<stdio.h> 2 #include<iostream> 3 #include<string.h> 4 #include<algorithm> 5 using namespace std; 6 const int inf=0x3f3f3f3f;///當(dāng)兩個(gè)點(diǎn)之間沒(méi)有邊時(shí)設(shè)置這兩個(gè)邊之間的距離為無(wú)窮大 7 const int maxn=110;///數(shù)組的長(zhǎng)度 8 int ma[maxn][maxn],lowcost[maxn];///ma[i][j]數(shù)組的用于存儲(chǔ)i,j兩點(diǎn)之間的距離,lowcast[j]用于存儲(chǔ)從標(biāo)記邊k到邊j的邊的長(zhǎng)度 9 bool vis[maxn];///用于記錄點(diǎn)是否已經(jīng)加入到樹中 10 int nodenum,sum; 11 void prim() 12 { 13 int temp,k; 14 sum=0; 15 memset(vis,false,sizeof(vis)); 16 vis[1]=true;///從1開始查詢 17 for(int i=1;i<=nodenum;i++) 18 { 19 lowcost[i]=ma[1][i]; 20 21 } 22 for(int i=1;i<=nodenum;i++){ 23 temp=inf;///temp用于存儲(chǔ)最短的距離 24 for(int j=1;j<=nodenum;j++){ 25 if(!vis[j]&&temp>lowcost[j]) 26 temp=lowcost[k=j];///在賦值的同時(shí)把j的值賦給k,下次就從k開始向其他結(jié)點(diǎn)尋找 27 if(temp==inf)break;///如果temp值沒(méi)有改變的話就證明該點(diǎn)不與其它點(diǎn)連通,最小生成樹建立失敗,跳出循環(huán) 28 vis[k]=true; 29 sum+=temp; 30 for(int j=1;j<=nodenum;j++){ 31 if(!vis[j]&&lowcost[j]>ma[k][j])///此時(shí)lowcast中其實(shí)還含有上一個(gè)結(jié)點(diǎn)到j(luò)的距離,若ma[k][j]不足夠小的話lowcast的值將不變 32 lowcost[j]=ma[k][j]; 33 } 34 } 35 } 36 37 } 38 int main() 39 { 40 int a,b,cost,edgenum; 41 while(cin>>nodenum&&nodenum){ 42 memset(ma,inf,sizeof(ma));///初始化最開始所有的點(diǎn)之間都不關(guān)聯(lián) 43 edgenum=nodenum*(nodenum-1)/2;///edgenum是所有點(diǎn)之間都有邊相連的邊的個(gè)數(shù) 44 for(int i=1;i<=edgenum;i++){ 45 cin>>a>>b>>cost; 46 if(cost<ma[a][b]){ 47 ma[a][b]=ma[b][a]=cost;///無(wú)向圖的邊沒(méi)有方向 48 } 49 } 50 prim(); 51 cout<<sum<<endl; 52 } 53 } View Code

?

轉(zhuǎn)載于:https://www.cnblogs.com/shangjindexiaoqingnian/p/5846665.html

總結(jié)

以上是生活随笔為你收集整理的最小生成树之prim的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。