SDUT-3362 数据结构实验之图论六:村村通公路
生活随笔
收集整理的這篇文章主要介紹了
SDUT-3362 数据结构实验之图论六:村村通公路
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
數據結構實驗之圖論六:村村通公路
Time Limit:?1000MS?Memory Limit:?65536KB Submit?Statistic?DiscussProblem Description
當前農村公路建設正如火如荼的展開,某鄉鎮政府決定實現村村通公路,工程師現有各個村落之間的原始道路統計數據表,表中列出了各村之間可以建設公路的若干條道路的成本,你的任務是根據給出的數據表,求使得每個村都有公路連通所需要的最低成本。Input
連續多組數據輸入,每組數據包括村落數目N(N <= 1000)和可供選擇的道路數目M(M <= 3000),隨后M行對應M條道路,每行給出3個正整數,分別是該條道路直接連通的兩個村莊的編號和修建該道路的預算成本,村莊從1~N編號。?Output
輸出使每個村莊都有公路連通所需要的最低成本,如果輸入數據不能使所有村莊暢通,則輸出-1,表示有些村莊之間沒有路連通。?Example Input
5 8 1 2 12 1 3 9 1 4 11 1 5 3 2 3 6 2 4 9 3 4 4 4 5 6Example Output
19Hint
Author
#include<iostream> #include <cstring> #define Minimum 0x3f3f3f3f//無窮大 using namespace std; int Map[1010][1010];//用二維數組來表示圖的邊的關系 int visit[1010];//頂點標記數組,值為1表示訪問過,為0則沒有訪問過 int lowcost[1010];//存儲每個頂點與之相連邊的權值 int n,m; int prim() {int i,j,k;int sum =0,flag=0;int Min;visit[1]=1;for(i=1;i<=n;i++)//權值初始化{lowcost[i]=Map[i][1];}for(i=2;i<=n;i++){Min = Minimum;for(j=1;j<=n;j++)//尋找每個頂點與之相連的邊的最小權值{if(!visit[j]&&lowcost[j]<Min){Min = lowcost[j];k=j;}}if(Min==Minimum)//如果某個頂點與之相連的邊找不到最小權值,則表示道路不通{flag = 1;break;}sum+=Min;visit[k]=1;for(j=1;j<=n;j++)//從新更新 下一次判斷要用的權值{if(!visit[j]&&lowcost[j]>Map[j][k])lowcost[j]=Map[j][k];}}if(!flag)cout<<sum<<endl;elsecout<<-1<<endl; } int main() {int u,v,w;while(cin>>n>>m){memset(Map,Minimum,sizeof(Map));//memset函數里面只能賦值為 0 -1(源于對補碼的機制)memset(visit,0,sizeof(visit));while(m--){cin>>u>>v>>w;Map[u][v]=Map[v][u]=w;}prim();}return 0; }/*************************************************** User name: YT1658506207邵雪源 Result: Accepted Take time: 0ms Take Memory: 2160KB Submit time: 2017-08-11 19:17:20 ****************************************************/總結
以上是生活随笔為你收集整理的SDUT-3362 数据结构实验之图论六:村村通公路的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第三周项目4顺序表应用2 删除元素在[x
- 下一篇: SDUT-2144 图结构练习——最小生