1.模板一
此段模板取自《挑戰程式設計競賽》p106-107
//int cost[inf][inf];//邊
//int used[inf];
//int mincost[inf];//x到節點v的最小值
//int v;
int prim()
mincost[0] = 0;
int res = 0;
while (1)
if(v == -1) break;
used[v] = true;
res += mincost[v];
//在此頂點基礎上對x到其他頂點的最小值進行更新
for (int i = 0; i < v; i += 1)
}return res;
}
2.模板二
對以上模板進行優化,利用堆儲存每個節點,複雜度可以達到o(elogv)
//int v;
//int ans;
//int mincost[maxn];
//int used[maxn];
//struct edge
//edge (int to,int cost):to(to),cost(cost){}
//};
//vector g[maxn];//存放從i出發的邊
//typedef pairp;//first存放距離,second存放節點
//priority_queue,greater> que;
void prim()}}
printf("%d\n",ans);
}
最小生成樹 Prim演算法(模板)
基本演算法 首先以乙個結點作為最小生成樹的初始結點,然後以迭代的方式找出與最小生成樹中各結點權重最小邊,並加入到最小生成樹中。選擇一條權值最小,且一端點a已加入生成樹,另一端點b在剩餘結點集內的邊作為最小生成樹上的邊,同時將b列入生成樹的已有點集中。當所有結點都加入到最小生成樹中之後,就找出了連通圖...
最小生成樹prim演算法模板
include using namespace std const int inf 0x3f3f3f3f 最大值,方便計算 int n,m n是點的個數,m是邊的數量 int dis 105 vis 105 dis是判斷未加入生成樹的頂點到已知生成樹的最短距離,vis判斷是否已經加入生成樹 int ...
模板) 最小生成樹Prim演算法
演算法跟dijkstra很像 但是要特別注意兩點 1.最好使用乙個額外的陣列來保證每個點只被訪問一次,否則的話應該保證在35行處使用e.dis dis e.num 而不僅是 否則會造成一些相等的額外相加。2.40行的地方要注意與dijkstra的區別!不是加而是直接換!include include...