最小生成樹之Prim演算法

2022-07-28 05:39:10 字數 1010 閱讀 1750

prim演算法是用來求乙個生成樹的方法,它是乙個貪心演算法。它的思想是,先選定連通無向圖中的乙個節點加入

最小生成樹s中,然後從剩下的結點中,尋找到達該生成樹距離最小的結點加入,如此迴圈

下去,知道生成樹包含了所有的結點就停止,這時候的生成樹就是最小生成樹。

因為prim演算法是通過不斷尋找新加入的點,所以它的時間複雜度和結點數n有關,

為o(n2),所以它比較適合用於邊比較多的稠密圖。

首先確定乙個初始點t0,加入點集s中

在剩餘結點集u中,尋找乙個點ti使得它到s中某點的距離是最小的

記錄下每次加入的邊的權值

根據新加入的點更新s到其它各點的距離

重複以上3、4步驟,直到u為空,

#includeusing namespace std;

#define n 10

#define inf 237644

int prim(int g[n], int n)

} }//取0為頭結點

for (int i = 0; i < n; i++)

int next = 0;

visit[0] = 1; //頭結點已訪問

for (int i = 1; i < n; i++)

} cout << "min" << min << endl;

cout << endl;

len += min;

visit[next] = 1;

mst[i] = next;

//輸出

cout << lastpoint[next] << "->" << mst[i] <<" "<>m>> n;

for (int i = 0; i < m; i++)

} for (int i = 0; i < n; i++)

int len = prim(g,m);

cout << len << endl;

system("pause");

}

最小生成樹之prim演算法

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

最小生成樹之prim演算法

普利姆演算法 prim algorithm 最小生成樹的概念 所謂最小生成樹,就是在乙個具有n個頂點的帶權連通圖g中,如果存在某個子圖g 其包含了圖g中的所有頂點和一部分邊,且不形成迴路,並且子圖g 的各邊權值之和最小,則稱g 為圖g的最小生成樹。普利姆演算法 prim algorithm 演算法描...

最小生成樹之prim演算法

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