Prims演算法 最小生成樹

2022-03-16 13:18:46 字數 952 閱讀 5191

2017-07-26  14:35:49

prims演算法,是一種基於「貪心」的求最小樹的演算法 ,以每次加入乙個鄰接邊來建立最小樹,直到找到n-1個邊為止。

規則:以開始時生成樹的集合為起始的頂點,然後找出與生成樹集合鄰接的邊中,加權值最小的邊來生成樹,

為了確定新加入的邊不會造成迴路,所以每乙個新加入的邊,只允許有乙個頂點在生成樹的集合中。 

適用:稠密圖

用自己的話來講:prims演算法跟之前的kruskal演算法不大一樣,kruskal演算法主要是通過對權值進行從低到高的排序,確定先後加入的邊

prims演算法則比較高階,從某乙個點出發,尋找到跟這個點最近的這個點,兩個組成集合,查詢離這兩個點最近的幾個點,找到最近的點,

將其加入到生成樹中,組成集合,一直到找到n-1個邊為止;

**如下:

//

這裡使用無向圖

#include using

namespace

std;

const

int maxn = 2001

;const

int inf = 99999999

;int

n,e;

intw[maxn][maxn];

int mincount[maxn]; //

從初始頂點到該頂點的最小權值

void

init()

}void prim(int s) //

從標號為s處開始生成樹

mincount[k] = 0;//

將該點加入到最小生成樹中

cnt += min; //

將這條邊權值加入到最小生成樹中

for(j = 1;j<=n;j++) //

修正初始點到每個點的最小權值}}

cout

<< cnt <}int

main()

最小生成樹演算法

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

最小生成樹演算法

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

演算法 最小生成樹

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