#include "介面執行如下:stdafx.h
"#include
#include
#include
#include
using
namespace
std;
#define infinity int_max
#define max_vertex_num 20 //
頂點最多個數
#define length 5 //
頂點字元長度
//********************************kruskal(並查集實現)********************************begin
typedef
struct
_edge
edge;
typedef
struct
_graph
graph;
intfather[max_vertex_num];
intrank[max_vertex_num];
int locatevex(const graph & g, char
name[length])
}return -1;}
//圖的建造
void creategraph(graph &g)
fcin>>g.arcs;
char
archead[length];
char
arctail[length];
intweight;
for (int i = 0; i < g.arcs; i++)
}int comp(const
void *a,const
void *b)
//並查集
//1、初始化
void
make_set()}//
2、查詢
int find_set(int
x)
returnx;}
//3、合併
bool union(int first, int
second)
else
else
father[x] =y;
}return
true
; }
return
false;}
//kruskal演算法
void
minispantree_kruskal(graph g)}}
cout
<
最少花費為:
"********************************kruskal(並查集實現)********************************end
//輔助函式,設定控制台的顏色
void
setconsoletextcolor(word dwcolor)
setconsoletextattribute(handle, dwcolor);
}int _tmain(int argc, _tchar*argv)
圖建造用到的kruskal.txt檔案為:
6v1 v2 v3 v4 v5 v6
10v1 v2
6v1 v3
1v1 v4
5v2 v3
5v2 v5
3v3 v4
5v3 v5
6v3 v6
4v4 v6
2v5 v6
6
最小生成樹 kruskal 並查集
題目描述 如題,給出乙個無向圖,求出最小生成樹,如果該圖不連通,則輸出orz 輸入輸出格式 輸入格式 第一行包含兩個整數n m,表示該圖共有n個結點和m條無向邊。n 5000,m 200000 接下來m行每行包含三個整數xi yi zi,表示有一條長度為zi的無向邊連線結點xi yi 輸出格式 輸出...
並查集與kruskal最小生成樹
1 概述 並查集 disjoint set或者union find set 是一種樹型的資料結構,常用於處理一些不相交集合 disjoint sets 的合併及查詢問題。a.乙個集合是一棵樹,b.根節點下標代表集合名稱,根節點的父為為負數,絕對值表示集合中的元素個數。並查集的重要知識點 a.加權規則...
演算法 最小生成樹之 kruskal演算法 並查集
演算法 最小生成樹之 kruskal演算法 並查集 kruskal演算法需要從不同連通分量中選擇鏈結邊權最小的加入到生成樹中,每個連通分量可以看成乙個等價類,初始每個頂點都是乙個連通分量,將新邊加入類似等價類的合併過程,因此結合並查集演算法實現kruskal int father n int ran...