A - 还是畅通工程(最小生成树)
点击打开链接
Input测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( < 100 );随后的N(N-1)/2行对应村庄间的距离,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间的距离。为简单起见,村庄从1到N编号。
当N为0时,输入结束,该用例不被处理。
Output对每个测试用例,在1行里输出最小的公路总长度。
Sample Input
3 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 Output
3 5Huge input, scanf is recommended.
隔了那么长时间再来做这道题,还是犯了上次同样的错误,初始化parent数组
for(int i = 0; i <= n; i++)
这个地方一定是<=,一直不过真的很不爽,还是自己对代码不熟悉。
AC代码
#include<stdio.h> #include<algorithm>using namespace std;int parent[105]; //定义parent数组用来判断边与边是否形成环路 int sum;struct Edge {int beginn;int endd;int weight;} edges[5005];bool cmp(Edge a, Edge b) {if(a.weight == b.weight)return a.beginn < b.beginn;elsereturn a.weight < b.weight; }int Find(int f) {while( parent[f] > 0 ){f = parent[f];}return f;}//Kruskal算法生成最小生成树 void MiniSpanTree_Kruskal(int x, int y) {int i, n, m;for( i = 0; i <= x; i++ ){parent[i] = 0;}for( i = 0; i < y; i++ ){n = Find(edges[i].beginn);m = Find(edges[i].endd);if( n != m ) //如果n==m,则形成环路不满足! {parent[n] = m; //将此边的结尾顶点放入下标为起点的parent数组中,表示此顶点已经在生成树集合中 sum += edges[i].weight;}}printf("%d\n", sum); }int main() {int t, i, ans;while(scanf("%d", &t) != EOF , t){sum = 0;ans = t*(t - 1)/2;for( i = 0; i < ans; i++ ){scanf("%d %d %d", &edges[i].beginn, &edges[i].endd, &edges[i].weight);}sort(edges, edges+ans, cmp);MiniSpanTree_Kruskal(t, ans);}return 0;}
还有一种叫做PRIM算法的也可以解这道题。
PRIM算法
转载于:https://www.cnblogs.com/ruruozhenhao/p/7406522.html
A - 还是畅通工程(最小生成树)相关推荐
- hdu1879 继续畅通工程 最小生成树
继续畅通工程 此题明显属于最小生成树的题目 关于最小生成树,有两种方法,一种是Kruskal方法,一种是Prim算法,第一种用并查集即可实现 1 /* 2 hdu1879 3 2013-03-18 1 ...
- hdu 1233 还是畅通工程 最小生成树(prim算法 + kruskal算法)
还是畅通工程 Time Limit: 4000/2 ...
- hdu 1879 继续畅通工程 (最小生成树)
继续畅通工程 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- HDU 1879 继续畅通工程 最小生成树
继续畅通工程 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Description ...
- 还是畅通工程 最小生成树
某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可 ...
- HDU 1863畅通工程(最小生成树)(prim算法)
畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- 畅通工程//最小生成树prim
题目: 畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...
- hdu 1879 继续畅通工程 最小生成树
继续畅通工程 Time Limit: 2000/ ...
- 题目1017:还是畅通工程(最小生成树初步应用)
题目链接:http://ac.jobdu.com/problem.php?pid=1017 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...
- HDU 1863 畅通工程 最小生成树
思路: 比较典型的最小生成树的题目了..在这里用求最小生成树的经典算法K(Kruskal)算法和P(Prim)算法.我的 K 算法用的是结构体来存图,P 算法用的是邻接矩阵来存图,K算法的复杂度是O( ...
最新文章
- 阿里、拼多多P8面试分享!
- 【FPGA】单端口RAM的设计(异步读、同步写)
- 解决针对ubuntu11.04安装中文包后不能正常查看或使用pdf和Archiver的问题
- 根据浏览器navigator区分PC端还是移动端,区分操作系统,区分浏览器型号
- python在人工智能应用锁_python实现人工智能Ai抠图功能
- 数据算法之二叉树删除(BinaryTreeL Remove)的Java实现
- 最新版python如何安装qt5_Python3 搭建Qt5 环境的方法示例
- sql查询字段值只为汉字(桃)
- 企业IT架构转型之道(书)总结以及反思
- 数据库系统原理与设计(第3版)第二章课后习题
- android屏幕适配无效_Android 屏幕适配终结者
- sql语句练习题(mysql版)
- 给个华为服务器账号和密码忘了怎么办啊,华为路由器登陆用户名和密码忘了怎么办?...
- Docker配置阿里云镜像加速器以及镜像的常用操作命令
- acl 影响因子_计算机领域EI和SCI收录期刊及影响因子
- 盘点一份JS逆向代码转换为Python代码的教程
- 2022世界杯看球指南
- Deliberated Domain Bridging for Domain Adaptive Semantic Segmentation
- 《一个出身寒门的高考状元之死》
- Automatic Open-World Reliability Assessment
热门文章
- c语言英文单词倒着,C语言实现英文单词助手
- 华为畅享8的悬浮窗在哪里_1299元起,更大超清屏幕+强劲续航 华为畅享20 SE发布...
- 计算机趣味知识竞赛策划书,计算机趣味知识竞赛活动策划书.doc
- layui table行点击tr_layui的table单击行勾选checkbox功能方法
- 9模块化学习 java_Java 9模块
- python中rjust_Python字符串rjust()和ljust()
- android实例教程_Android内部存储示例教程
- 敬业签电脑手机云同步便签及安卓手机和苹果手机云同步桌面便签
- vscode中vue-cli项目es-lint的配置
- TypeScript + ES6