最小生成樹Kruskal演算法實現C 實現

2021-07-27 07:21:38 字數 1900 閱讀 4235

#include "stdafx.h"

#include

#define max 100

typedef int weitype;

using namespace std;

//

struct edge

;//邊集和

edge edge[max];

//已找到的最小生成樹其中一部分的秩

int rank[max];

//已找到的最小生成樹其中一部分的頭結點

//用來判斷一條邊的2個端點是否在乙個集合中,即加上這條邊是否會形成迴路

int parent[max];

//找出每一集合的頭結點

int find_set(int x)

//合併集合

void union_set(int x,int y,weitype w,weitype &sum)

sum +=w;

}//依據邊的權值公升序快速排序

void fast_sort(edge *edge,int begin,int end)

//快排

fast_sort(edge,1,n);

for(i=1;i<=n;i++)

}cout<

-------------------------------------------程式測試-------------------------------------------

請輸入案例的個數:1

請輸入邊的個數:14

請輸入第1條邊的二個端點的名稱(小寫字元):a b

這條邊的權值為:4

請輸入第2條邊的二個端點的名稱(小寫字元):a h

這條邊的權值為:8

請輸入第3條邊的二個端點的名稱(小寫字元):b c

這條邊的權值為:8

請輸入第4條邊的二個端點的名稱(小寫字元):b h

這條邊的權值為:11

請輸入第5條邊的二個端點的名稱(小寫字元):c d

這條邊的權值為:7

請輸入第6條邊的二個端點的名稱(小寫字元):c f

這條邊的權值為:4

請輸入第7條邊的二個端點的名稱(小寫字元):c i

這條邊的權值為:2

請輸入第8條邊的二個端點的名稱(小寫字元):d e

這條邊的權值為:9

請輸入第9條邊的二個端點的名稱(小寫字元):d f

這條邊的權值為:14

請輸入第10條邊的二個端點的名稱(小寫字元):e f

這條邊的權值為:10

請輸入第11條邊的二個端點的名稱(小寫字元):f g

這條邊的權值為:2

請輸入第12條邊的二個端點的名稱(小寫字元):g h

這條邊的權值為:1

請輸入第13條邊的二個端點的名稱(小寫字元):g i

這條邊的權值為:6

請輸入第14條邊的二個端點的名稱(小寫字元):h i

這條邊的權值為:7

最小生成樹的邊集為:

序號:12 端點1:g,端點2:h

序號:11 端點1:f,端點2:g

序號:7 端點1:c,端點2:i

序號:1 端點1:a,端點2:b

序號:6 端點1:c,端點2:f

序號:5 端點1:c,端點2:d

序號:3 端點1:b,端點2:c

序號:8 端點1:d,端點2:e

最小生成樹的權值為:37

請按任意鍵繼續. . .

最小生成樹 kruskal(演算法)

最小生成樹 圖中有好多點呀 n個 讓我們找到n 1條邊,來把他們連上吧,但是要讓這n 1條邊的和最小。kruskal演算法 把所有邊由公升序排列,然後從最小的一條邊找起,如果這條邊的兩點不屬於乙個集合 此處運用並查集 那麼就要這條邊,否則,忽略這條邊吧 一直這樣找下去,直到找了n 1條邊為止,此時,...

最小生成樹 Kruskal演算法

1.概覽 kruskal演算法是一種用來尋找最小生成樹的演算法,由joseph kruskal在1956年發表。用來解決同樣問題的還有prim演算法和boruvka演算法等。三種演算法都是貪婪演算法的應用。和boruvka演算法不同的地方是,kruskal演算法在圖中存在相同權值的邊時也有效。2.演...

最小生成樹 kruskal演算法

2016.12.30 演算法思想 先將邊按照權值排序,從權值最小的邊開始列舉,如果當前邊連線的兩個點不屬於同一集合,就將這兩個點連起來 用到的資料結構是並查集 一直到列舉完所有的邊,此時生成的就是最小生成樹 include include include include using namespac...