最小生成樹prim模板

2021-08-09 03:27:08 字數 1023 閱讀 7256

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...