08-图7 公路村村通(浙大数据结构)
中国大学MOOC-陈越、何钦铭-数据结构-2022夏
08-图7 公路村村通
分数 30
作者 陈越
单位 浙江大学
现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。
输入格式:
输入数据包括城镇数目正整数N(≤1000)和候选道路数目M(≤3N);随后的M行对应M条道路,每行给出3个正整数,分别是该条道路直接连通的两个城镇的编号以及该道路改建的预算成本。为简单起见,城镇从1到N编号。
输出格式:
输出村村通需要的最低成本。如果输入数据不足以保证畅通,则输出−1,表示需要建设更多公路。
输入样例:
6 15
1 2 5
1 3 3
1 4 7
1 5 4
1 6 2
2 3 4
2 4 6
2 5 2
2 6 6
3 4 6
3 5 1
3 6 1
4 5 10
4 6 8
5 6 3
输出样例:
12
Prim 算法求最小生成树:
/**Prim 算法求最小生成树:
*//**
#include <iostream>
#include <algorithm>using namespace std;const int maxn = 1010;
const int INF = 0x3fffffff;
int G[maxn][maxn]; //邻接矩阵
int d[maxn]; //顶点到“防护罩”的距离
bool hs[maxn]; //顶点是否已被访问int Nv,Ne;void Read(); //读入数据
int Prim(); //最小生成树,Prim算法int main()
{fill(*G,*G+maxn*maxn,INF);Read();cout << Prim() << endl;return 0;
}void Read() //读入数据
{cin >> Nv >> Ne;for(int i=0;i<Ne;++i){int u,v,cost;cin >> u >> v >> cost;G[u][v] = G[v][u] = cost;}
}int Prim() //最小生成树,Prim算法
{fill(d,d+maxn,INF);d[1]=0;int ans=0;for(int i=1;i<=Nv;++i){int u=-1,MIN=INF;for(int j=1;j<=Nv;++j){if(hs[j]==0 && d[j]<MIN){u=j;MIN=d[j];}}if(u==-1)return -1;hs[u]=1;ans+=d[u];for(int v=1;v<=Nv;++v){if(hs[v]==0 && G[u][v]!=INF && G[u][v] < d[v])d[v] = G[u][v];}}return ans;
}
*/
2)Kruskal 算法求最小生成树;
/**2)Kruskal 算法求最小生成树;
*/#include <iostream>
#include <algorithm>
#include <cstring>using namespace std;struct ENode
{int u,v;int cost;
};const int maxn = 3010;
const int INF = 0x3fffffff;ENode E[maxn]; //边图
int fath[maxn]; //存贮每个结点的根节点int Nv,Ne;bool cmp(ENode &a,ENode &b)
{return a.cost < b.cost;
}void Read(); //读入数据
int FindFather(int x);
int Kruskal(); //最小生成树,Kruskal算法int main()
{Read();cout << Kruskal() << endl;return 0;
}void Read() //读入数据
{cin >> Nv >> Ne;ENode edge;for(int i=0;i<Ne;++i){cin >> edge.u >> edge.v >> edge.cost;E[i] = edge;}
}int FindFather(int x)
{if(fath[x]<0)return x;elsereturn fath[x]=FindFather(fath[x]); //路径压缩
}int Kruskal() //最小生成树,Kruskal算法
{memset(fath,-1,sizeof(fath));sort(E,E+Ne,cmp);int ans=0 ,Num_Edge=0; //ans存储最小生成树的顶点权值之和,Num_Edge 存储最小生成树的边数for(int i=0;i<Ne;++i){int faU=FindFather(E[i].u);int faV=FindFather(E[i].v);if(faU!=faV) //如果没有形成闭环,就可以加入最小生成树中{ans+=E[i].cost;fath[faU]=faV;++Num_Edge;if(Num_Edge == Nv-1)break;}}if(Num_Edge != Nv-1)return -1;elsereturn ans;
}
08-图7 公路村村通(浙大数据结构)相关推荐
- 八、图(下):公路村村通
目录 题目描述 代码 解题思路和出现的问题 题目描述 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本. 输入格式: 输入数据包括城 ...
- 浙大数据结构:08-图7 公路村村通 (30 分)Prim与Kruskal算法
08-图7 公路村村通 (30 分) 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本. 输入格式: 输入数据包括城镇数目正整数N( ...
- 7-10 公路村村通 (最小生成树Prim算法) | PTA数据结构与算法——C语言实现
公路村村通 非常直白的最小生成树问题. 原题链接:PTA | 程序设计类实验辅助教学平台 题目描述 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通 ...
- PTA_21_08_图7 _公路村村通
PTA_21_08_图7 _公路村村通 题目描述 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本. 输入格式 输入数据包括城镇数目 ...
- PTA 公路村村通 思路分析及代码解析
PTA 公路村村通 一.前导 1. 需要掌握的知识 2. 题目信息 二.解题思路分析 1. 题意理解 1. 1 输入数据 1.2 输出数据 2. 思路分析(重点) 三.具体实现 1. 弯路和bug 2 ...
- 5-10 公路村村通 (Kruskal+并查集)
5-10 公路村村通 (30分) 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本. 输入格式: 输入数据包括城镇数目正整数NN(\ ...
- 2-1 公路村村通 (25 分)
现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本. 输入格式: 输入数据包括城镇数目正整数N(≤1000)和候选道路数目M(≤3N) ...
- 7-3 公路村村通 (30分)含解析
7-3 公路村村通 (30分) 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本. 输入格式: 输入数据包括城镇数目正整数N(≤10 ...
- 08-图7 公路村村通
08-图7 公路村村通(30 分) 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本. 输入格式: 输入数据包括城镇数目正整数N(≤ ...
最新文章
- 独家 | 集成学习入门介绍
- Spring Boot构建多租户SaaS平台核心技术指南
- iphone5新尺寸
- windows(xshell)免密码登录
- Java8 中用法优雅的 Stream 性能也优雅吗?
- linux下epoll如何实现高效处理
- 趣谈哈希表优化:从规避 Hash 冲突到利⽤ Hash 冲突
- flex上传图片到java服务器
- CRM下午茶(22)-客户关系管理应用现状
- GLUEscript(wxJavascript)
- 北京玉渊潭开启春节模式 五大版块吸引游客
- 比较两个数的大小,自定义比较两个整数的大小的方法
- android条码扫描串口,串口条码扫描器的正确安装方法[图解]
- 基于钓鱼邮件测试的安全意识教育方法
- Activiti7讲义
- Apache ab性能测试结果分析
- iOS微信第三方登录
- ToBeWritten之嵌入式操作系统
- [日推荐]『穷游智能攻略』国外游最佳拍档
- [源代码]基于D-S证据理论的雷达探测信息融合