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