最小生成樹(MST)模板 Kruskal演算法

2021-08-16 17:07:45 字數 620 閱讀 1129

最小生成樹:

給定乙個無向圖,如果它的某個子圖中任意兩個點都相互連通並且是一顆樹,那麼這棵樹就叫生成樹。

如果邊上的權值和最小的話,生成樹就叫做最小生成樹。

綜合簡潔性和效率這裡僅提供kruskal演算法:

注意:由於是無向圖,所以每條邊新增的時候,只新增一次就夠了!

下面給出模板:

#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;

const int maxn=110;

struct edge

bool operator < (const edge& a)const

//並查集

int kruskal()

//不存在最小生成樹輸出-1。

return cnt>=n-1? sum : -1;

}}//主函式新增邊,這裡給出連線矩陣連加邊的方式!

int main()

cout<}

}

最小生成樹(MST)

在帶權圖中,所有的生成樹中邊權的和最小的那棵 或幾棵 被稱為最小生成樹。幾點注意 求最小生成樹使用kruskal演算法。使用並查集處理節點的集合屬性,初始時所有結點屬於只包含其自身的孤立集合。實現 include include using namespace std define n 101 in...

最小生成樹 MST

1 prim演算法 對點進行貪心操作。適合稠密圖 const int m 1005 int vis m 表示該i點是否被選擇 vis i 0 還未被選擇 int map m m map i j 表示i到j的距離 int dis m 1到i的距離和 void prim cout sum 2 krusk...

最小生成樹MST

最小生成樹是在一張無向連通圖中,找到一棵樹,使得其邊的代價之和最小。注 可能存在多個最小生成樹。以邊為展開,將圖中的最小代價邊嘗試加入集合tree中,並且該邊不能與集合tree中的邊形成環,如此迭代,最終得到的集合tree為mst。因此可以採用並集查的方式實現kruskal演算法 以點為展開,將圖中...