最小生成樹之Kruskal 並查集實現

2021-09-06 05:46:03 字數 1893 閱讀 3289

#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檔案為:

6

v1 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...