最小生成樹演算法

2021-09-23 06:02:18 字數 940 閱讀 2423

假設 n 表示圖中點數,m表示圖中邊數。

適用於稠密圖,時間複雜度 o(n2)。

核心思想:每次挑一條與當前集合相連的最短邊。

c++ **

// st[i] 表示點i是否在當前生成樹集合中

// dist[i] 表示點i到當前集合的最短邊的長度

// g[i][j] 表示點i和點j之間邊的長度

// 返回值:最小生成樹中所有邊的總長度

intprim()

dist[1]

=0;for

(int i =

1; i <= n; i ++

) st[id]

= true;

res +

= dist[id]

;// 用新加入的點更新其餘點到生成樹的最短邊

for(

int j =

1; j <= n; j ++)if

(!st[j]

) dist[j]

=min

(dist[j]

, g[id]

[j]);}

return res;

}

適用於稀疏圖,時間複雜度 o(mlogm)。

核心思想:從小到大挑不多餘的邊。

c++ **

// 邊的資訊

struct edge};

// 並查集——尋找當前集合的代表元素

intfind

(int x)

// 所有邊儲存在 edge edges[m];

// 函式返回最小生成樹中所有邊的總長度

intkruskal()

}return res;

}

最小生成樹演算法

由帶權的連通圖生成的數的各邊加起來稱為生成樹的權,把權值最小的生成樹稱為最小生成樹 minimum spanning tree 簡稱為mst 構造最小生成樹的方法就是利用mst性質,一條一條地選擇可以加入的邊。下面介紹兩種用於構造最小生成樹的演算法,其中第一種演算法稱為prim演算法,第二種演算法稱...

最小生成樹演算法

乙個最簡單的最小生成樹 圖結構練習 最小生成樹 time limit 1000ms memory limit 65536k 有n個城市,其中有些城市之間可以修建公路,修建不同的公路費用是不同的。現在我們想知道,最少花多少錢修公路可以將所有的城市連在一起,使在任意一城市出發,可以到達其他任意的城市。輸...

演算法 最小生成樹

前言 最小生成樹是在乙個給定的無向圖中求一棵樹,這棵樹包含無向圖中的所有頂點,且樹中的邊都來自無向圖中的邊,並且要滿足整棵樹的邊權之和最小。1 最小生成樹是樹,其邊數等於頂點數減1,且不會有環 2 對於給定的圖最小生成樹可以不唯一,但是邊權之和一定是唯一的。3 其根節點可以是這棵樹上的任何乙個節點,...