#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. 暑假撸系统1-先把git后悔药准备好!

    学校规定让暑假自己撸一款在线考试系统,其实的确需要一个款在线的考试系统系统,因为平时学校是使用Excel讲解选择题的.基于这个目标那么就话不多说.开干! 本来趁着项目想练练手,使用些新学习的技能看看, ...

  2. Cobbler 批量安装操作系统

    文章目录 环境准备 部署cobbler cobbler语法检查以及排错 问题1 问题2 问题3 问题4 问题5 问题6 问题7 问题8 修改dhcp模板 重启服务,再次检查 镜像配置 镜像导入 kic ...

  3. Java多线程Thread类了解和使用

    创建线程的两种方式 extends Thread 类 public class WelComeApp { public static void main(String[] args) { Welcom ...

  4. Renix软件如何发送CRC错误的报文——网络测试仪实操

    我们在日常使用Renix软件时,有时候需要发送CRC错误的报文,那么如何操作呢?接下来为你详细介绍一下操作步骤. 1.打开Renix软件,连接机框并预约测试端口: 2.添加流模板 3.给P1设置CRC ...

  5. 3款著名BI工具功能盘点,哪款更实用?

    随着信息技术的发展和应用, 人类进入了一个大数据时代.5G的到来也在不断影响我们的生活,很明显,5G将在世界上留下持久的印记和影响力.每秒10千兆比特的传输速度,它比4G网络的连接速度提高了100倍左 ...

  6. 【Windows 操作系统】 内核对象|句柄

    内核对象简介 内核对象就是 一些数据结构该结构用来描述存储内核中的一个内存块中的数据信息.   内存块是一种数据结构,其中的数据成员负责维护该对象的相应信息,这个数据结构以及其中的数据成员只能由内核访 ...

  7. Hive常用函数大全-字符串函数

    1.字符串长度函数:length(X)(返回字符串X的长度) select length('qwerty') from table --6 2.字符串反转函数:reverse(X)(返回字符串X反转的 ...

  8. linux中at命令详解

    转至:https://blog.51cto.com/12822117/2121101 at命令: 一:简介: 计划任务,在特定的时间执行某项工作,在特定的时间执行一次,需要安装at服务,apt-get ...

  9. Linux主机内存评估手册-从零到无

    --时间:2020年10月22日 --作者:飞翔的小胖猪 文档基于Centos Linux操作系统作为生产服务器运行环境.实时的查看分析当前系统内存的使用情况是否存在内存瓶颈,结合应用及现行业务需求分 ...

  10. Python:Dict

    0.运算符 in:检查字典中是否有某个key 'a' in {'a':1,'b':2} True 提取其中Key对应的Value: d={'1':'A','2':'B','3':'C'} d['2'] ...