最小生成樹

2021-08-21 11:28:10 字數 719 閱讀 4238

在無向圖中,連通且不含環的圖稱為樹(tree)

給定無向圖g=(v,e),連線g中所有的點,且邊集是e的子集的樹稱為g的生成樹(spanning tree)

而權值最小的生成樹稱為最小生成樹(minimal spanning tree,mst)

構造mst的演算法有很多,最常見的有兩個:kruskal演算法和prim演算法,kruskal演算法簡單高效。

kruskal演算法的第一步是給所有的邊按照從小到大的順序排序,接下來從小到大依次考查每條邊(u,v)

情況1:u和v在同乙個連通分量中,那麼加入(u,v)後會形成環,因此不能選擇

情況2:如果u,v在不同的連通分量,那麼加入(u,v)一定是最優的

struct edge

};priority_queueq;

int pre[maxn];//每個點的前驅節點,初始化為-1

int cnt;//最小生成樹所需邊的個數

int get_parent(int x)//查詢x的前驅節點

bool mix(int x,int y)//判斷x,y是否在同乙個集合

ll kruskal()

return cost;

}

最小生成樹 次小生成樹

一 最小生成樹 說到生成樹首先要解釋一下樹,樹是乙個聯通的無向無環圖,多棵樹的集合則被稱為森林。因此,樹具有許多性質 1.兩點之間的路徑是唯一的。2.邊數等於點數減一。3.連線任意兩點都會生成乙個環。對於乙個無向聯通圖g的子圖,如果它包含g的所有點,則它被稱為g的生成樹,而各邊權和最小的生成樹則被稱...

最小生成樹

package 圖 最小生成樹是用最少的邊吧把所有的節點連線起來。於是和圖的深度優先搜素差不多。class stack public void push int key public int pop 檢視棧頂的元素 public int peek public boolean isempty cla...

最小生成樹

define max vertex num 20 最大頂點數 typedef int adjmatrix max vertex num max vertex num 鄰接矩陣型別 typedef char vertextype typedef struct mgraph struct dnodecl...