HDU 1879(最小生成树问题,Prim)
生活随笔
收集整理的這篇文章主要介紹了
HDU 1879(最小生成树问题,Prim)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Problem Description
省政府“暢通工程”的目標是使全省任何兩個村莊間都可以實現公路交通(但不一定有直接的公路相連,只要能間接通過公路可達即可)。現得到城鎮道路統計表,表中列出了任意兩城鎮間修建道路的費用,以及該道路是否已經修通的狀態。現請你編寫程序,計算出全省暢通需要的最低成本。
當N為0時輸入結束。#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;?? }??
?
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總結
以上是生活随笔為你收集整理的HDU 1879(最小生成树问题,Prim)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2:找众数
- 下一篇: 用深度优先搜索解迷宫问题