最小生成樹之prim演算法

2021-07-02 14:04:04 字數 916 閱讀 5296

普利姆演算法(prim algorithm)

最小生成樹的概念

所謂最小生成樹,就是在乙個具有n個頂點的帶權連通圖g中,如果存在某個子圖g',其包含了圖g中的所有頂點和一部分邊,且不形成迴路,並且子圖g'的各邊權值之和最小,

則稱g'為圖g的最小生成樹。

普利姆演算法(prim algorithm)

演算法描述:

普利姆演算法求最小生成樹時候,和邊數無關,只和定點的數量相關,所以適合求稠密網的最小生成樹,時間複雜度為o(n*n)。

演算法過程:

1.將乙個圖的頂點分為兩部分,一部分是最小生成樹中的結點(a集合),另一部分是未處理的結點(b集合)。

2.首先選擇乙個結點,將這個結點加入a中,然後,對集合a中的頂點遍歷,找出a中頂點關聯的邊權值最小的那個(設為v),將此頂點從b中刪除,加入集合a中。

3.遞迴重複步驟2,直到b集合中的結點為空,結束此過程。

4.a集合中的結點就是由prime演算法得到的最小生成樹的結點,依照步驟2的結點連線這些頂點,得到的就是這個圖的最小生成樹。

#define inf 0x3f3f3f3f//無窮大

#define max 1000

int map[max][max], lowcost[max];

bool visit[max];//bool為布林型用作邏輯判斷

int nodenum, sum;

void prim()

}

最小生成樹之prim演算法

最小生成樹的演算法思想和介面介紹過的求單源的最短路徑演算法dijkstra演算法有很多相似地方,甚至很多 都是一樣。prim演算法要解決的主要問題是路徑的最短問題。假設平面上有很多點,各個點之間有很多的線連線起來,並且到達各個點的距離不相同,需要求出一條路徑,使得各個點都能被連線起來,並且他們的距離...

最小生成樹之prim演算法

mst minimum spanning tree,最小生成樹 問題有兩種通用的解法,prim演算法就是其中之一,它是從點的方面考慮構建一顆mst,大致思想是 設圖g頂點集合為u,首先任意選擇圖g中的一點作為起始點a,將該點加入集合v,再從集合u v中找到另一點b使得點b到v中任意一點的權值最小,此...

最小生成樹之Prim演算法

mst minimum spanning tree,最小生成樹 問題有兩種通用的解法,prim演算法就是其中之一,它是從點的方面考慮構建一顆mst,大致思想是 設圖g頂點集合為u,首先任意選擇圖g中的一點作為起始點a,將該點加入集合v,再從集合u v中找到另一點b使得點b到v中任意一點的權值最小,此...