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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HDU 1879(最小生成树问题,Prim)

發布時間:2025/6/15 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HDU 1879(最小生成树问题,Prim) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Problem Description 省政府“暢通工程”的目標是使全省任何兩個村莊間都可以實現公路交通(但不一定有直接的公路相連,只要能間接通過公路可達即可)。現得到城鎮道路統計表,表中列出了任意兩城鎮間修建道路的費用,以及該道路是否已經修通的狀態。現請你編寫程序,計算出全省暢通需要的最低成本。

?

Input 測試輸入包含若干測試用例。每個測試用例的第1行給出村莊數目N ( 1< N < 100 );隨后的 N(N-1)/2 行對應村莊間道路的成本及修建狀態,每行給4個正整數,分別是兩個村莊的編號(從1編號到N),此兩村莊間道路的成本,以及修建狀態:1表示已建,0表示未建。

當N為0時輸入結束。

?

Output 每個測試用例的輸出占一行,輸出全省暢通需要的最低成本。

?

Sample Input 3 1 2 1 0 1 3 2 0 2 3 4 0 3 1 2 1 0 1 3 2 0 2 3 4 1 3 1 2 1 0 1 3 2 1 2 3 4 1 0

?

Sample Output 3 1 0[c-sharp] view plaincopy
  • #include?<stdio.h>??
  • #include?<math.h>??
  • #include?<string.h>??
  • #define?MAX?105??
  • #define?MAXCOST?99999999??
  • ??
  • int?n;??
  • int?sum;??
  • int?graph[MAX][MAX];??
  • ??
  • ??
  • void?Prim()?????
  • {?????
  • ????int?i,j,k,min;?????
  • ????int?lowcost[MAX];?????
  • ????int?adjvex[MAX];?????
  • ????for(i=1;i<n;i++)?????
  • ????????lowcost[i]=graph[0][i];???//從第一個的頂點開始?????
  • ????memset(adjvex,0,sizeof(adjvex));???????
  • ????min=MAXCOST;?????
  • ????for(i=1;i<n;i++)?????
  • ????{?????
  • ????????min=MAXCOST;?????
  • ????????for(j=1;j<n;j++)?????
  • ????????????if(adjvex[j]==false?&&?lowcost[j]<min)?????
  • ????????????{?????
  • ????????????????min=lowcost[j];?????
  • ????????????????k=j;????//記下最小的點?????
  • ????????????}?????
  • ????????????adjvex[k]=true;???//為true表示該權值已經是最小,為flase是還不確定,應繼續更新?????
  • ????????????for(j=1;j<n;j++)?????
  • ????????????{?????
  • ????????????????if(adjvex[j]==false?&&?lowcost[j]>graph[k][j])??//更新lowcost?????
  • ????????????????????lowcost[j]=graph[k][j];?????
  • ????????????}?????
  • ????}?????
  • ????for(i=1;i<n;i++)?????
  • ????????sum+=lowcost[i];??//這就是最小生成樹?????
  • }?????
  • ??
  • int?main()??
  • {??
  • ????int?m,i,j,a,b,c,d;??
  • ????while?(scanf("%d",&n),n)??
  • ????{??
  • ????????for?(i=0;i<n;i++)??
  • ????????{??
  • ????????????for?(j=0;j<n;j++)??
  • ????????????{??
  • ????????????????????graph[i][j]?=?graph[j][i]?=?MAXCOST;??
  • ????????????}??
  • ????????}??
  • ????????m=n*(n-1)/2;??
  • ????????for?(i=1;i<=m;i++)??
  • ????????{??
  • ????????????scanf("%d%d%d%d",&a,&b,&c,&d);??
  • ????????????if(d==0)??
  • ????????????????graph[a-1][b-1]=graph[b-1][a-1]=c;??
  • ????????????else??
  • ????????????????graph[a-1][b-1]=graph[b-1][a-1]=0;??
  • ????????}??
  • ????????sum=0;??
  • ????????Prim();??
  • ????????printf("%d/n",sum);??
  • ????}??
  • ????return?0;??
  • }??
  • 總結

    以上是生活随笔為你收集整理的HDU 1879(最小生成树问题,Prim)的全部內容,希望文章能夠幫你解決所遇到的問題。

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