prim演算法主要的思路:將點集一分為二,通過找到兩個點集之間的最短距離,來確定最小生成樹,每次確定最短距離後,對兩個點集進行更新。
具體的實現過程:難點就是如何找到兩個點集之間的最短距離,這裡設定兩個陣列,lowcost[i],mst[i],分別表示以i為終點的邊和對應的起點,有了這兩個陣列就能夠順利的進行狀態更新了。(整個**與dijstra演算法驚人的相似),大家可以將兩者對比起來看。
**:
#include #define inf 99999999#includeusing
namespace
std;
int a[110][110
];int lowcost[110];//
lowcost[i]表示以i為終點的最短距離,
int mst[110];//
mst[i]對應的lowcost[i]的起點
//預設的起點為1
void prim(int
n) }
cout
<<'v'
<"
"<<'v'
<"
"for(int i=2;i<=n;i++)
}flag[tmp]=1
; }
}int
main()
}for(int i=1;i<=m;i++)
prim(n);
return0;
}
演算法筆記 普里姆Prim演算法的簡單實現
由於最近在學習資料結構,在學習的過程中動手把演算法的思路用 的形式實現了,這樣記憶更深刻。所以在此記錄下學習普里姆演算法時,如何通過該演算法獲得連通網的最小生成樹。一 建立以鄰接矩陣為儲存方式的帶權連通無向圖 連通網 二 利用prim演算法計算最小邊的權值之和 1 從圖中任取乙個頂點,把它當成一棵樹...
Prim 演算法的實現
最小生成樹除了prim還有kruskal演算法。prim演算法的實現,用到了優先佇列。include include include include include include include include include using namespace std 邊表 class edgeno...
prim演算法的實現
新增鏈結描述 執行了一下prim 演算法 覺得這個程式還可以 後期可以在此基礎上做較大的改動 故此分享了這個 include define maxvex 10 define true 1 define false 0 define inf 65535 此處是權值極大值 define length a...