入门经典-最小生成树代码与注释
来源:互联网 发布:c语言从入门到精通txt 编辑:程序博客网 时间:2024/04/29 20:06
#include <iostream>#include <algorithm>using namespace std;int r[100],//边的编号 对之排序 w[100],//对应编号边的权值 s[100],//对应边的起始端点 e[100],//对应边的结束端点 p[100],//并查集 n; //边的数量,点从0开始int cmp(int i,int j) {return w[i]<w[j];}void read(){ cin>>n; for(int i=0;i<100;++i) { r[i]=i;//初始化边的序号 p[i]=i;//并查集初始,每一条边自成一个连通区域 //代表元为其本身 } for(int i=0;i<n;++i) { cin>>s[i]//端点1 >>e[i]//端点2 >>w[i];//权值 } sort(r,r+n,cmp);}int find_head(int a) {return p[a]==a?a:p[a]=find_head(p[a]);}int Kruskal(){ int ans=0; for(int i=0;i<n;++i) { int t=r[i]; //取得第i+1小的边的编号 int x=find_head(s[t]); //取得该边的端点1的代表元 int y=find_head(e[t]); //取得该边的端点2的代表元 if(x!=y)//不属于同一连通区域 { ans += w[t];//如未成环加入权值 p[x]=y; //s(t)所属连通区域与e(t)合并,即代表元相同 } } return ans;}int main(){ read(); int ans=Kruskal(); for(int i=0;i<n;++i) cout<<r[i]<<" "<<s[r[i]]<<" "<<e[r[i]]<<" "<<w[r[i]]<<endl; cout<<ans; return 0;}
0 0
- 入门经典-最小生成树代码与注释
- 最小生成树入门-hdu102
- 破圈法求最小生成树 代码
- 最小生成树算法代码
- 最小生成树代码练习
- prim经典算法求最小生成树
- 经典算法之最小生成树
- bzoj1601 最小生成树经典建模
- bzoj 1601 最小生成树经典题
- 最小生成树经典算法(C++版)
- 经典代码注释
- 手写matlab的prim最小生成树(注释很详细)
- 手写matlab的Kruskal最小生成树(注释很详细)
- 图---生成树与最小生成树
- 最大生成树与最小生成树
- poj 1251~最小生成树~入门
- 最小生成树(入门题)
- [入门]最小生成树--poj1258 Agi-Net
- 关于后台返回json数据给前台
- 其他小知识
- 给linux安装更新的php
- java注解
- 使用uci的C API获得和修改参数
- 入门经典-最小生成树代码与注释
- awk去掉某字符串前面所有的字符
- html中的meta标签总结与属性介绍
- 用 KVM 搭建web集群实验笔记 - 环境准备
- 怎么理解Condition
- 闲着没事写的一个简单的连接池
- JavaSE学习_06_extends_visit_block_override
- android的消息机制
- 项目部署groovy运行时报错"wrong class format"