ACM寒假集訓第七天 最小生成樹

2021-09-10 02:57:17 字數 1320 閱讀 8477

乙個有 n 個結點的連通圖的生成樹是原圖的極小連通子圖,且包含原圖中的所有 n 個結點,並且有保持圖連通的最少的邊。 [1] 最小生成樹可以用kruskal(克魯斯卡爾)演算法或prim(普里姆)演算法求出。

prim在稠密圖中比kruskal優,在稀疏圖中比kruskal劣。

kruskal:

#include #include #include #define inf 0x3f3f3f3f

using namespace std;

const int maxn = 1e3 + 5;

struct edge

e[maxn]; //存圖

bool cmp (struct edge a, struct edge b) //排序

int f[maxn];

void init (int n) //初始化

}int getf (int x) //找根

int merge(int x, int y) //合併,核心**

return 0;

}int main()

sort(e + 1, e + n + 1, cmp); //從1開始排序,都+1

int sum = 0;

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

}cout << sum << endl;

return 0;

}

prim: 

#include #include #include #define inf 0x3f3f3f3f

using namespace std;

const int max=1e3+5;

int map[max][max],dis[max],book[max];

int main()

} int a,b,c;

for(int i=1;i<=m;i++) //存圖 }

for(int i=1;i<=n;i++) //距離初始

int count=0,sum=0,min,u;

book[1]=1;

count++;

while(countmap[u][v])

}} cout

}

2013寒假ACM集訓 最小生成樹

普里姆演算法 稠密圖 克魯斯卡爾演算法 稀疏圖 1.prime 演算法 貪心 集合加點 2.kruskal演算法 並查集 加邊 思想是加 點,在邊比較多的情況下,用prime。思路 先找 任意一點到其他的點的 最短距離,再找 這個點和剛才的點 到其他的點的最短距離,依次重複 最小生成樹 prime模...

第七天 樹的遍歷

最近真是各種事情纏繞在一起,一直不敢揮霍時間刷題,慚愧慚愧。像鍊錶一樣,在練習樹的演算法之前先開一章,打好基礎,主要是遍歷的方法 前中後序遍歷,非遞迴版本,廣度 層次 遍歷。ps 深度遍歷暫缺,另外後序的非遞迴版本copy別人的方法需要鞏固。偷個懶,一股腦全部貼上來 include include ...

第七章(6) 最小生成樹

由minispantree prim 可知prim演算法的時間複雜度為o n n n為頂點數 與網中的邊數無關,因此使用於求邊稠密的網的最小生成樹。而kruskal演算法恰恰相反,它的時間複雜度為o e log e e為網中邊的數目 它比較適合求邊稀疏的網的最小生成樹。include stdio.h...