#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. set和setenv

    今天用set设置PATH变量(加一个路径),发现虽然echo的时候显示修改成功了,实际执行命令的时候确没有去那个路径查找:当前shell是c shell(csh). 在网上找了一些材料,总结如下:   ...

  2. MASA Framework - DDD设计(2)

    目录 MASA Framework - 整体设计思路 MASA Framework - EventBus设计 MASA Framework - MASA Framework - DDD设计(1) MA ...

  3. 轻松理解JS中的面向对象,顺便搞懂prototype和__proto__的原理介绍

    这篇文章主要讲一下JS中面向对象以及 __proto__,ptototype和construcator,这几个概念都是相关的,所以一起讲了. 在讲这个之前我们先来说说类,了解面向对象的朋友应该都知道, ...

  4. python中类的调用

    1 class Computer: # 创建类,类名首字母大写 2 screen = True # 类的属性 3 4 def start(self): # 创建实例方法,不要漏了 self 5 pri ...

  5. ctf平台

    CTF靶场 蓝鲸安全:http://whalectf.xin bugku:https://ctf.bugku.com XCTF攻防世界:https://adworld.xctf.org.cn/ i春秋 ...

  6. BI报表系统该如何集成到其他系统呢?

    近期小麦我经常收到很多用户的反馈,想知道Smartbi的报表能不能从微信/钉钉之类的直接跳转到已做好的报表页面?他们都希望通过这种方式尽可能地避免由于各个管理软件账号密码不同而造成的不便,能够在日常工 ...

  7. 免费报表软件下载推荐------值得办公小白下载的Web报表工具

    Smartbi免费报表软件更是国内报表产品的新高峰,它直接使用Excel作为报表设计器,易用性.功能性.运行速度都得到了大幅提升,遥遥领先竞品.该产品以"真Excel"为最大特色, ...

  8. windev的字符集选择设置及元素命名方法建议

    windev支持多语言,且支持整站翻译,同时支持最终用户的多语言选择,可以说多语言功能已经非常的全面和强大. windev原生支持英语.法语和葡萄牙语,在使用如中文等非拉丁字母语言时,需要在多个地方进 ...

  9. 快速安装与配置kubernetes集群搭

    Kubernetes是什么? 首先,它是一个全新的基于容器技术的分布式架构领先方案.这个方案尽然很新,但它是谷歌十几年以来大规模应用容器技术的经验积累和升华的一个重要成果.确切地说,kubernete ...

  10. PyTorch 中的乘法:mul()、multiply()、matmul()、mm()、mv()、dot()

    torch.mul() 函数功能:逐个对 input 和 other 中对应的元素相乘. 本操作支持广播,因此 input 和 other 均可以是张量或者数字. 举例如下: >>> ...