kruskal最小生成树(MST)算法
来源:互联网 发布:联想笔记本网络开关 编辑:程序博客网 时间:2024/05/17 15:59
该算法适用于边稀疏而顶点较多的图!!
关键是不构成回路的判断
例子:
代码:
#include<iostream>#include<queue>using namespace std;struct EdgeNode{int v1;int v2;int value;bool operator<(const EdgeNode &a) const //定义一个比较边大小的符号重载 {return a.value<value;}};int *root;priority_queue<EdgeNode> pq; //优先级队列int Find(int x) // x是某个顶点的编号{int i=x;while(i!=root[i])i=root[i];while(i!=root[x]){x=root[x];root[x]=i;}return i;}void Union(int a,int b) // a、b是对应于某条边的两个顶点编号{a=Find(a);b=Find(b);if(a!=b)root[a]=b;}void Kruskal(){EdgeNode b;cout<<" 加入最小生成树中的边依次为 : "<<endl;while(!pq.empty()){b=pq.top();pq.pop();if(Find(b.v1)!=Find(b.v2)){cout<<b.v1<<"----"<<b.v2<<endl;Union(b.v1,b.v2);}}}int main(){int n=0;int m=0;cout<<" 请输入图中点的个数 : "<<endl;cin>>n;root=new int [n+1]; //为啥是n+1,因为下面点的编号从1开始,则共需_n+1个下标for(int i=1;i<=n;i++)root[i]=i;cout<<" 请输入图中边的条数 : "<<endl;cin>>m;EdgeNode a;cout<<" 请依次输入每条边的两个顶点及其权重 : "<<endl;while(m--){cin>>a.v1>>a.v2>>a.value;pq.push(a);}Kruskal();return 0;}
0 0
- kruskal最小生成树(MST)算法
- 最小生成树(MST) Kruskal 算法
- 最小生成树MST-Kruskal算法
- Kruskal算法求MST(最小生成树)
- MST最小生成树 Kruskal算法
- 算法导论 最小生成树MST-KRUSKAL
- 最小生成树(MST)——Kruskal算法
- Kruskal算法实现最小生成树MST(java)
- 算法整理:最小生成树(mst)-Prim+Kruskal
- 最小生成树(MST):Prim / Kruskal
- hrbust 1133报告、MST最小生成树 Kruskal算法
- MST最小生成树及克鲁斯卡尔(Kruskal)算法
- 图的最小生成树(MST)之Kruskal算法
- 图的最小生成树MST--Kruskal算法
- 最小生成树(MST)—prim和kruskal算法
- 最小生成树(MST)----普里姆(Prim)算法与克鲁斯卡尔(Kruskal)算法
- Hrbust 1123 MST(最小生成树,Kruskal算法|Prim算法)
- java实现图的最小生成树(森林)MST克鲁斯卡尔(Kruskal)算法
- LeetCode--No.12--Integer to Roman
- final的初始化
- Openstack组件部署 — Keystone Install & Create service entity and API endpoints
- LVS-DR模型实现负载均衡
- EasySwift/EasyEmoji ios或者swift匹配判断emoji
- kruskal最小生成树(MST)算法
- python学习 stackflow社区 python的机器学习库
- 第4.3节 编写一个具有加、减、乘、除四则运算功能的计算机程序
- EasySwift/EasySwift 最简单,最高效,最时髦的swift开发全套解决方案
- UNITY3D圆形算法
- Android中的"架构"选择
- Simplify Path
- easyui的tab加载页面中的form重复提交
- Volley使用笔记(二)