#include <stdio.h>
#include <stdlib.h> #define MAX 100 int N, M; struct Edge {
int u,v;
int weight;
} edge[MAX]; int vertexs[MAX];
int parents[MAX]; int edge_cmp(const void* a, const void* b) {
return ((struct Edge*)a)->weight - ((struct Edge*)b)->weight;
} int parents_find(int x) {
int s;
for(s = x; parents[s] >= 0; s = parents[s]){
;
}
return s;
} void parents_union(int r1, int r2) {
int s1, s2;
int tmp;
s1 = parents_find(r1);
s2 = parents_find(r2);
tmp = parents[s1] + parents[s2];
if(parents[s1] < parents[s2]) {
parents[s2] = s1;
parents[s1] = tmp;
}
else {
parents[s1] = s2;
parents[s2] = tmp;
}
} void kruskal() {
int sum_weight = 0;
int num = 0;
int i, u, v;
for(i = 0; i < M; i++) {
u = edge[i].u;
v = edge[i].v;
if(parents_find(u) != parents_find(v)) {
printf("%d %d %d\n", u + 1, v + 1, edge[i].weight);
num ++;
sum_weight += edge[i].weight;
parents_union(parents_find(u), parents_find(v));
}
if(num == N -1) {
break;
}
}
printf("weight of MST is %d\n", sum_weight);
} int main() {
int i;
int u, v, w; while(1) {
scanf("%d%d", &N, &M);
if(N == 0 && M == 0) {
break;
}
/* init */
for(i = 0; i < N; i++) {
vertexs[i] = i;
parents[i] = -1;
} for(i = 0; i < M; i++) {
scanf("%d%d%d", &u, &v, &w);
u --;
v --;
edge[i].u = u;
edge[i].v = v;
edge[i].weight = w;
} /* sort */
qsort(edge, M, sizeof(edge[0]), edge_cmp);
kruskal();
} return 0;
}

加边,并查集

[算法] kruskal最小生成树算法的更多相关文章

  1. Kruskal 最小生成树算法

    对于一个给定的连通的无向图 G = (V, E),希望找到一个无回路的子集 T,T 是 E 的子集,它连接了所有的顶点,且其权值之和为最小. 因为 T 无回路且连接所有的顶点,所以它必然是一棵树,称为 ...

  2. [算法系列之二十七]Kruskal最小生成树算法

    简单介绍 求最小生成树一共同拥有两种算法,一个是就是本文所说的Kruskal算法,还有一个就是Prime算法. 在具体解说Kruskal最小生成树算法之前,让我们先回想一下什么是最小生成树. 我们有一 ...

  3. 并查集和kruskal最小生成树算法

    并查集 先定义 int f[10100];//定义祖先 之后初始化 for(int i=1;i<=n;++i) f[i]=i; //初始化 下面为并查集操作 int find(int x)//i ...

  4. 贪心算法(2)-Kruskal最小生成树

    什么是最小生成树? 生成树是相对图来说的,一个图的生成树是一个树并把图的所有顶点连接在一起.一个图可以有许多不同的生成树.一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n ...

  5. Kruskal算法:最小生成树

    //Kruskal算法按照边的权值从小到大查看一遍,如果不产生圈(重边等也算在内),就把当前这条表加入到生成树中. //如果判断是否产生圈.假设现在要把连接顶点u和顶点v的边e加入生成树中.如果加入之 ...

  6. Prim算法和Kruskal算法(图论中的最小生成树算法)

    最小生成树在一个图中可以有多个,但是如果一个图中边的权值互不相同的话,那么最小生成树只可能存在一个,用反证法很容易就证明出来了. 当然最小生成树也是一个图中包含所有节点的权值和最低的子图. 在一个图中 ...

  7. 最小生成树--Prim算法,基于优先队列的Prim算法,Kruskal算法,Boruvka算法,“等价类”UnionFind

    最小支撑树树--Prim算法,基于优先队列的Prim算法,Kruskal算法,Boruvka算法,“等价类”UnionFind 最小支撑树树 前几节中介绍的算法都是针对无权图的,本节将介绍带权图的最小 ...

  8. 最小生成树算法(Prim,Kruskal)

    边赋以权值的图称为网或带权图,带权图的生成树也是带权的,生成树T各边的权值总和称为该树的权. 最小生成树(MST):权值最小的生成树. 生成树和最小生成树的应用:要连通n个城市需要n-1条边线路.可以 ...

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

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

随机推荐

  1. 配置php时。提示的错误session_start(): Failed to initialize storage module解决办法

    当浏览器输入访问地址后 报这样的错时----session_start(): Failed to initialize storage module 进入到此目录vi /usr/local/php/e ...

  2. Puppent 介绍原理及安装

    Puppet原理: Puppet是一个或者多个master,众多client,所有的客户端都定期(默认为30分钟)使用facter工具把 客户端的基本信息,通过https的xmlrpc协议发送给服务器 ...

  3. Objective-C语法之NSMutableString字符串的那些事儿

     Objective-C语法之字符串那些事         NSMutableString 类 继承NSString类,那么NSString 提供的方法在NSMutableString中基本都可以使用 ...

  4. Interview with Oleg

    Interview with Oleg time limit per test 1 second memory limit per test 256 megabytes input standard ...

  5. Android OpenGL ES(五)GLSurfaceView .

    Android OpenGL ES 相关的包主要定义在 javax.microedition.khronos.opengles    GL 绘图指令 javax.microedition.khrono ...

  6. 利用Fiddler抓取手机APP数据包

    Fiddler是一个调试代理,下载地址http://www.telerik.com/download/fiddler 下载安装运行后,查出运行机器的IP,手机连接同一网域内的WIFI,手机WIFI连接 ...

  7. php fsockopen

    1.PHP fsockopen函数说明: Open Internet or Unix domain socket connection(打开套接字链接) Initiates a socket conn ...

  8. Gson解析数据

    package com.bwie.test;import java.io.BufferedReader;import java.io.IOException;import java.io.InputS ...

  9. [转]Android之Context和Activity互相转换

    1.context转换为activity Activity activity = (Activity) context; 2.从activity得到context 在activity的方法中用cont ...

  10. surpersocket客户端

    大家在学习surpersocket时候,都是拿telnet测试的吧,是不是没有 客户端 而感到 烦恼. 我么,就抽了一点时间 写了个简单的客户端代码. 针对QuickStart的 1-Basic 第一 ...