C 之最小生成樹演算法(Prim)

2021-10-01 07:32:56 字數 1717 閱讀 5504

最小生成樹是一副連通加權無向圖中一棵權值最小的生成樹。

在一給定的無向圖 g = (v, e) 中,(u, v) 代表連線頂點 u 與頂點 v 的邊(即 (u,v)\in e),而 w(u, v) 代表此邊的權重,若存在 t 為 e 的子集 且 (v, t) 為樹,使得

w(u,v)}w(t)=\sum _w(u,v)

的 w(t) 最小,則此 t 為 g 的最小生成樹。

最小生成樹其實是最小權重生成樹的簡稱。

prim演算法的每一步都會為一棵生長中的樹新增一條邊,該樹最開始只有乙個頂點,然後會新增v-1個邊。每次總是新增生長中的樹和樹中除該生長的樹以外的部分形成的切分的具有最小權值的橫切邊。
void graph::prim(size_t v) 

} verptr->visited[v] = true; //對頂點進行標記

++count; //對增加的邊數進行更新

auto beg = lists[v].begin();

while (beg != lists[v].end())

++beg;

} }}

prim演算法的時間複雜度:prim演算法與dijkstra演算法幾乎是一樣的,因此其時間複雜度也是一樣,所以請看我的這一篇部落格對prim演算法的時間複雜度的介紹。

參考《資料結構與演算法分析——c語言描述》

貪心演算法之最小生成樹(Prim)

最小生成樹 prim 網路的生成樹中的邊帶權值,將生成樹各邊的權值加起來稱為生成樹的權,權值最小的生成樹稱為為最小生成樹。設g v,e 是連通帶權圖,v prim演算法基本思想 首先置s 然後,只要s是v的真子集,就進行如下貪心選擇 選取滿足條件i s,j v s,且c i j 最小的邊,將頂點j新...

演算法學習之最小生成樹prim演算法

首先描述一下prim演算法的步驟,首先將所有的點分為兩類,第一類是在生成樹中的節點,第二類是不在生成樹中的節點,我們首先任取乙個節點放入生成樹中,然後找到距離這棵樹 當前狀態就是這個點 最近的點,然後將其放入到生成樹中,之後再進行尋找距離這棵樹最近的點,直到將所有的節點都加入到生成樹中。我們發現其實...

最小生成樹prim演算法C

以前也寫過,這次看 決定寫一下.總不寫東西的話,腦袋就笨笨了.用到的東西都在前面的圖實現裡.要說啊,不久之後,用stl dll寫出來,呵呵.加油吧.graph.cpp 2011 08 28 21.20 include stdafx.h include graphrepresentasadjacent...