最小生成树——还是畅通工程
2014-08-25 16:19
260 查看
Description某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。
Input测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( < 100 );随后的N(N-1)/2行对应村庄间的距离,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间的距离。为简单起见,村庄从1到N编号。
当N为0时,输入结束,该用例不被处理。
Output对每个测试用例,在1行里输出最小的公路总长度。
Sample Input3
1 2 1
1 3 2
2 3 4
4
1 2 1
1 3 4
1 4 1
2 3 3
2 4 2
3 4 5
0 Sample Output3
5
Input测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( < 100 );随后的N(N-1)/2行对应村庄间的距离,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间的距离。为简单起见,村庄从1到N编号。
当N为0时,输入结束,该用例不被处理。
Output对每个测试用例,在1行里输出最小的公路总长度。
Sample Input3
1 2 1
1 3 2
2 3 4
4
1 2 1
1 3 4
1 4 1
2 3 3
2 4 2
3 4 5
0 Sample Output3
5
代码如下:
#include <iostream> #include"cstdio" #include"cstring" #include"cstdlib" using namespace std; int Map[120][120]; int dis[120]; int vis[120]; int n,m; int sum; const int inf=999999; void prim(int n) { memset(vis,0,sizeof(vis)); for(int i=1;i<=n;i++) { dis[i]=Map[1][i]; } vis[1]=1; sum=0; for(int i=1;i<n;i++) { int Min=inf; int pos; for(int j=1;j<=n;j++) { if(!vis[j]&&dis[j]<Min) { Min=dis[j]; pos=j; } } if(Min>=inf) break; sum+=Min; vis[pos]=1; for(int j=1;j<=n;j++) { if(!vis[j]&&Map[pos][j]<dis[ c368 j]) { dis[j]=Map[pos][j]; } } } } int main() { while(scanf("%d",&n),n) { for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) Map[i][j]=inf; Map[i][i]=0; } for(int i=1;i<=n*(n-1)/2;i++) { int a,b,c; scanf("%d%d%d",&a,&b,&c); if(Map[a][b]>c) Map[a][b]=Map[b][a]=c; } prim(n); printf("%d\n",sum); } return 0; }
相关文章推荐
- HDU1233 还是畅通工程(最小生成树模板题,Prime,kruskal算法)
- HDU - 1233 还是畅通工程(最小生成树)
- HDU 1233 还是畅通工程(最小生成树 Prim+Kruskal)
- hdu 1233 最小生成树 "还是畅通工程"
- hdu-1233 还是畅通工程(最小生成树)
- HDU - 1233 - 还是畅通工程 (最小生成树!!)
- hdu 1233 还是畅通工程(最小生成树,kruskal,前向星)
- hdu 1233 还是畅通工程(最小生成树prim)
- hdu 1233 还是畅通工程(最小生成树)
- 1233 还是畅通工程(最小生成树)
- 图论(2)-还是畅通工程(最小生成树)
- hdu-1233-还是畅通工程(最小生成树,prim算法)
- 【HDU】-1233-还是畅通工程(最小生成树)
- HDU 1233 还是畅通工程(最小生成树)
- 还是畅通工程(最小生成树)模板题
- HDU 1233 还是畅通工程(最小生成树)
- hdu1233——还是畅通工程(最小生成树)
- HDU ~ 1233 ~ 还是畅通工程 (最小生成树)
- 题目1017:还是畅通工程(最小生成树)
- HDOJ 题目1233还是畅通工程(最小生成树,kruskal模板)