畅通工程
来源:互联网 发布:无限制的网络访问 编辑:程序博客网 时间:2024/05/17 05:50
省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。经过调查评估,得到的统计表中列出了有可能建设公路的若干条道路的成本。现请你编写程序,计算出全省畅通需要的最低成本。
行对应村庄间道路的成本,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间道路的成本(也是正整数)。为简单起见,村庄从1到M编号。当N为0时,全部输入结束,相应的结果不要输出。
3 3 1 2 1 1 3 2 2 3 4 1 3 2 3 2 0 100
3 ?
#include<stdio.h>#include<string.h>#define inf 0x3f3f3f3fint main(){ int i, j, temp, minn, n, m, e[105][105], a, b, c, book[105], dis[105]; while(scanf("%d%d", &n, &m)!=EOF, n) { int ans=0, flag=0; for(i=0;i<m;i++) for(j=0;j<m;j++) e[i][j]=inf; for(i=0;i<m;i++) book[i]=0; for(i=0;i<n;i++) { scanf("%d%d%d", &a, &b, &c); if(c<e[a-1][b-1]) e[a-1][b-1]=e[b-1][a-1]=c; } book[0]=1; for(i=0;i<m;i++) dis[i]=e[0][i]; for(i=1;i<m;i++) { minn=inf; flag=0; for(j=0;j<m;j++) { if(book[j]==0&&dis[j]<minn) { minn=dis[j]; temp=j; flag=1; } } if(!flag) break; book[temp]=1; ans+=dis[temp]; for(j=0;j<m;j++) if(book[j]==0&&dis[j]>e[temp][j]) dis[j]=e[temp][j]; } if(flag) printf("%d\n", ans); else printf("?\n"); } return 0;}
阅读全文
0 0
- 畅通工程
- 畅通工程
- 畅通工程
- 畅通工程
- 畅通工程
- 畅通工程
- 畅通工程
- 畅通工程
- 畅通工程
- 畅通工程
- 畅通工程
- 畅通工程
- 畅通工程
- 畅通工程
- 畅通工程
- 畅通工程
- 畅通工程
- 畅通工程
- 归并算法的简单运用
- 3.1 SCORE UVA1585
- 揭开RecyclerView的神秘面纱:处理RecyclerView的点击事件
- HTTP报文
- 欢迎使用CSDN-markdown编辑器
- 畅通工程
- JS刷新当前页面的几种方法总结
- Maven项目pom.xml文件报xxx\target\classes\META-INF\MANIFEST.MF (系统找不到指定的路径)的问题解决
- 欢迎使用CSDN-markdown编辑器
- Linux之redhat中的高级网络配置
- C++数组指针v.s.指针数组 函数指针v.s.指针函数
- 进程管理API之ns_of_pid
- html5特效
- MyBatis从数据库取值的时候,当某一字段为null时,如何在返回前端的时候,也包含有这个字段