Kruskal 最小生成樹的總結

2021-04-23 11:26:55 字數 1016 閱讀 3269

寫了3,4天的最小生成樹,裡邊寫了報告和沒寫的加起來也有十題左右了。發現這些簡單的演算法裡頭有不少的pin。特別是2421讓人抓狂,bug乙個接乙個,wa了不下十數次後,在波波的指導下成功的ac了,後來自己又找到了原來程式的幾個bug。

原先寫這篇報告的時候以為kruskal比prim優秀許多。後來波波跟我說prim也是很強的,於是我分別用kruskal和prim寫了poj1789,發現原來prim也是很strong的,用的時間幾乎只有kruskal的20%,囧。於是現在把這篇報告改為kruskal最小生成樹總結,順便把標程貼出來以後好找~~

下面的是kruskal:

//這段**用kruskal來解決

#include 

#include 

#include 

#include 

using

namespace std;

// 邊型別

typedef

struct edge

}edge;

//最多可能的邊

edge edge[251001];

int parent[501];

//用於qsort()的比較函式

int compare(const

void*a,const

void *b)

// 找父節點並壓縮路徑

int find(int x)

// 合併集合

void union(int x,int y)

}int main()

sort(edge,edge + m * m,edge());

count = 1;

int max;

// 忽略那些為0的節點,有m個,然後從小到大去邊

for( int j = m; j < (m * m) && count < m; j++)

if(find(edge[j].x) != find(edge[j].y)) 

printf("%d/n",max);}}

唉,還是有parent好啊~~

kruskal 最小生成樹

include include 產生隨機數組用 include 同上 include using namespace std 1 帶權邊的類myarc class myarc bool operator const myarc arc myarc myarc int beginvex,int end...

最小生成樹Kruskal

最小生成樹有兩個特點,乙個是保證了所有邊的和是最小值,另乙個是保證了所有邊中的最大值最小。struct edge bool friend operator edge a,edge b 構邊 vectoredge int id max int mini void initial void input ...

最小生成樹(kruskal)

kruskal演算法 1 記graph中有v個頂點,e個邊 2 新建圖graphnew,graphnew中擁有原圖中相同的e個頂點,但沒有邊 3 將原圖graph中所有e個邊按權值從小到大排序 4 迴圈 從權值最小的邊開始遍歷每條邊 直至圖graph中所有的節點都在同乙個連通分量中 if 這條邊連線...