克鲁斯卡尔算法
来源:互联网 发布:手机客服软件 编辑:程序博客网 时间:2024/04/28 07:52
设N=(V,{E})是连通网
1)令最小生成树的初始状态为只有n个顶点而无边的非连通图T=(V, {}),图中每个顶点自成一个连通分量;
2)在E中选择代价最小的边,若该边依附的顶点落在T中不同的连通分量上,则将此边加入到T中,否则舍去此边而选择下一条代价最小的边;
3)反复执行第2)步,直至T中所有顶点都在同一连通分量上为止。
则T=(V, {TE})为N的最小生成树。
#include <cstdio>#include <cstdlib>#include <algorithm>#define MAX 20using namespace std;typedef struct{int data;int jihe;}VexNode;typedef struct{int vexh,vext;int weight;}EdgeNode;int cmp(EdgeNode A, EdgeNode B){return A.weight < B.weight;}void Kruskal(EdgeNode e[], int vexnum, int arcnum){VexNode vex[MAX];int i;for(i = 1; i <= vexnum; i ++){vex[i - 1].data = vex[i - 1].jihe = i;}int m1,m2,n1,n2,j,k = 1;i = 0;printf("\n=====华丽分割线=====\n");while(k < vexnum){m1 = e[i].vexh;m2 = e[i].vext;n1 = vex[m1- 1].jihe;n2 = vex[m2 - 1].jihe;if(n1 != n2){printf("%d %d %d\n",m1,m2,e[i].weight);k ++;for(j = 0; j < vexnum; j ++){if(n2 == vex[j].jihe)vex[j].jihe = n1;}}i ++;}}int main(){EdgeNode e[MAX];int vexnum,arcnum;scanf("%d%d",&vexnum,&arcnum);for(int i = 0; i < arcnum; i ++){scanf("%d%d%d",&e[i].vexh,&e[i].vext,&e[i].weight);}sort(e,e+arcnum,cmp);Kruskal(e,vexnum,arcnum);return 0;}
0 0
- 克鲁斯卡尔算法
- 克鲁斯卡尔算法
- 克鲁斯卡尔算法
- 克鲁斯卡尔算法
- 克鲁斯卡尔算法
- 克鲁斯卡尔算法
- 克鲁斯卡尔算法
- 克鲁斯卡尔算法
- 克鲁斯卡尔算法
- 克鲁斯卡尔算法
- 克鲁斯卡尔算法
- 克鲁斯卡尔(Kruskal)算法
- 克鲁斯卡尔算法模版
- 克鲁斯卡尔(Kruskal)算法
- kruskal克鲁斯卡尔算法
- 克鲁斯卡尔算法(Kruskal)
- 2524 克鲁斯卡尔算法
- 克鲁斯卡尔算法&普里姆算法
- JVM 垃圾回收算法
- 本月总结:第一个java项目
- 2线程同步-C++11中的互斥锁
- Tomcat的最大并发数
- Map -1 基本方法和几个注意点
- 克鲁斯卡尔算法
- Package 'openssh-server' has no installation candidate 问题解决
- 一个类精通B-P网络的精髓
- shiro授权,自定义realm实现授权,shiro与项目集成,在项目中实现认证及授权
- XMLHTTPRequest状态status完整列表
- 不要忘记JNI的异常处理
- 1.ActiveMQ介绍和学习资料
- Android6.0权限申请
- Java基础加强之集合篇