#include <iostream>
#include <algorithm>
using namespace std;
#define MAX 5
#define INF 32765 int graph[MAX][MAX]=
{{INF ,1,INF,4,3},
{1,INF,2,INF,INF},
{INF,1,INF,2,3},
{4,INF,2,INF,1},
{3,INF,3,1,INF}};
typedef struct
{
int begin,end,length;
}Edge;
bool cmp(const Edge &edge1,const Edge &edge2)
{
return edge1.length<edge2.length;
}
int origin(int path[],int v)//方法1:不带递归实现
{
while(path[v]!=v)
v=path[v];
return v;
}
int originRecursive(int path[],int v)//方法2:递归实现
{
if(path[v]==v)
return v;
return originRecursive(path,path[v]);
}
void main()
{
int i, j,k=0;
Edge g[100],gb[100];
int path[MAX]={0,1,2,3,4};
int max=0;
for(i=0;i<MAX;i++)
for(j=i+1;j<MAX;j++ )
{
if(graph[i][j]<INF)
{
g[max].begin=i;g[max].end=j;
g[max].length=graph[i][j];
max++;
}
}
for(i=0;i<max;i++)
cout<<"["<<g[i].begin<<", "<<g[i].end<<"] "<<g[i].length<<endl;
sort(g,g+max,cmp);
for(i=0;i<max;i++)
cout<<"[ "<<g[i].begin<<", "<<g[i].end<<"] "<<g[i].length<<endl;
for(i=0;i<max;i++)
{
int m,n;
m=originRecursive(path,g[i].begin);
n=originRecursive(path,g[i].end);
if(m!=n)
{
m<n?path[n]=m:path[m]=n;
gb[k++]=g[i];
}
}
for(i=0;i<k;i++)
cout<<"["<<gb[i].begin<<", "<<gb[i].end<<"] "<<gb[i].length<<endl;
}
originRecursive(path[],v)函数,是从v出发一直找到它的“祖先”的方法。
为了避免产生回路,故让path[大]=小,即 m<n?path[n]=m:path[m]=n;
比如考虑(3,6)这条边,3的祖先是1,6的祖先是4,现在让这两个连通分量合并为1个连通分量,则让3,6的祖先产生关系,
如果不这样的话,直接让3,6产生关系,则4与6间的关系则没有了。


												

Kruscal algorithm的更多相关文章

  1. hdu1162(最小生成树 prim or kruscal)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1162 意义:给出一些点,用线问使所有点直接或间接连通,需要多长: 思路:裸最小生成树: 法1: pri ...

  2. HDU1879 kruscal 继续畅通工程

    继续畅通工程 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  3. hdu 1102 Constructing Roads Kruscal

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1102 题意:这道题实际上和hdu 1242 Rescue 非常相似,改变了输入方式之后, 本题实际上更 ...

  4. 贪心算法(Greedy Algorithm)之最小生成树 克鲁斯卡尔算法(Kruskal&#39;s algorithm)

    克鲁斯卡尔算法(Kruskal's algorithm)是两个经典的最小生成树算法的较为简单理解的一个.这里面充分体现了贪心算法的精髓.大致的流程能够用一个图来表示.这里的图的选择借用了Wikiped ...

  5. 【UVA 10307 Killing Aliens in Borg Maze】最小生成树, kruscal, bfs

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=20846 POJ 3026是同样的题,但是内存要求比较严格,并是没有 ...

  6. 【HDU 4463 Outlets】最小生成树(prim,kruscal都可)

    以(x,y)坐标的形式给出n个点,修建若干条路使得所有点连通(其中有两个给出的特殊点必须相邻),求所有路的总长度的最小值. 因对所修的路的形状没有限制,所以可看成带权无向完全图,边权值为两点间距离.因 ...

  7. Kruscal 、 Prime Template

    Kruscal  Template : 很裸的Kruscal Template(求最小生成树中最长路,即最短路中最长路) //#pragma comment(linker, "/STACK: ...

  8. HDOJ 1598 Kruscal

    贪心思想的Kruscal:先对边排序,再从第一条边开始,一旦start point 和 end poiont 连上,就break #include <stdio.h> #include & ...

  9. 贪心算法(Greedy Algorithm)最小生成树 克鲁斯卡尔算法(Kruskal&#39;s algorithm)

    克鲁斯卡尔算法(Kruskal's algorithm)它既是古典最低的一个简单的了解生成树算法. 这充分反映了这一点贪心算法的精髓.该方法可以通常的图被表示.图选择这里借用Wikipedia在.非常 ...

随机推荐

  1. 利用shell脚本使用kubeadm部署kubenetes 1.18.6集群环境

    # README # 此脚本需要在master节点上使用 # 注意root密码,请提前修改 # 个人实验环境,注意机器最低配置:master(2G内存,1cpu2核心,否则集群会创建失败),node( ...

  2. WPF + Winform 解决管理员权限下无法拖放文件的问题

    wpf,winform混合解决管理员权限无法拖放文件的问题 学习自: https://zhuanlan.zhihu.com/p/343369663 https://zhuanlan.zhihu.com ...

  3. 使用.rmp文件在redhat7.9安装oracle19c

    19c开始,oracle提供了rmp安装包.感觉安装更方便一些了.记录一次测试环境安装. 1,创建交换空间 2,下载oracle 19c必要文件(oracle官网下载需要注册帐号,可以用迅雷下载后再上 ...

  4. C# 2进制、8进制、10进制、16进制...各种进制转换

    在.NET Framework中,System.Convert类中提供了较为全面的各种类型.数值之间的转换功能. 其中的两个方法可以轻松的实现各种进制的数值间的转换: Convert.ToInt32( ...

  5. linux中rlwrap安装

    转至:https://www.cnblogs.com/hw-1015/p/6601294.html 在linux上使用sqlplus命令的时候,上下键.空格键.删除键都不能使用,非常麻烦.安装了rlw ...

  6. Linux命令(ping-telnet-netstat-curl-ps)

    转至:https://www.jianshu.com/p/577bbd15a6f8 1.ping命令 ping命令用来测试主机之间网络的连通性.执行ping指令会使用ICMP传输协议,发出要求回应的信 ...

  7. pyinstaller:各种错误及解决方法

    1.DLL load failed 说明没有找到某个DLL 解决方法: 在 D:\Anaconda\Anaconda3\Library\bin 下找到缺失的DLL,复制到dist下 2.No modu ...

  8. Leaflet:Event与Layer类属性、方法

    Event 之所以要说Event,是因为很多类都是继承自Layer--Marker.Popup.Tooltip.Path以及继承自Path的Circle.Polyline.Polygon...:而La ...

  9. C语言刷2数/3数/4数之和

    15. 三数之和 /** * Return an array of arrays of size *returnSize. * The sizes of the arrays are returned ...

  10. Go切片全解析

    Go切片全解析 目录结构: 数组 切片 底层结构 创建 普通声明 make方式 截取 边界问题 追加 拓展表达式 扩容机制 切片传递的坑 切片的拷贝 浅拷贝 深拷贝 数组 var n [4]int f ...