普利姆演算法(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中任意一點的權值最小,此...