最小生成樹總結

2021-07-11 15:58:41 字數 1138 閱讀 5572

給定一張圖,圖中有許多的節點還有許多長度不同的邊將這些點點相互連線,找出連線所有點的最短方式就是最小生成樹,可以證明,這樣一種最小的情況是不會出現環的,由於所有的無環圖都可以看做樹,所以成為最小生成樹。

頂層思想是分治,選擇策略是貪心,實現方法如下:以邊為中心,先將所有的邊從小到大進行排序,之後依照大小順序依次選擇,如果這條邊連線的兩個節點是不連通的(判斷聯通狀態可以使用並查集),那麼久選擇這條邊,否則就不選擇,因為這個演算法是以邊為中心的所以用來計算稀疏圖更快一些。

給定乙個有權值的圖,找出聯通圖內所有節點的最小路徑。

6 92 4 11

3 5 13

4 6 3

5 6 4

2 3 6

4 5 7

1 2 1

3 4 9

1 3

**#include #include #include using namespace std;

int f[50];

struct line

lines[50];

int cmp(const void *a,const void *b)

void init(int n)

int getf(int a)

}int merge(int a,int b)

else return 0;

}int main(int argc, const char * argv)

qsort(lines,m,sizeof(lines[0]),cmp);

for(int i=0;i<=m-1;i++) cout<#include

#include

using namespace std;

int u[100],v[100],w[100],frist[100],nex[100],n,m,dis[100],book[100],sum;

int const maxn=99999999;

void change(int k)//use k point to change

for(int i=1;i<=2*m;i++)

for(int i=1;i<=n;i++) dis[i]=maxn;

change(1);

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

cout<

最小生成樹總結

啊,先紀念一下吧,難得一天這麼 666 ac 完了所有題 次小生成樹 看懂 今天學到了最小生成樹演算法中的 prim 演算法和kruskal 演算法。從巨集觀上來講 prim 更適合稠密圖,krustal 更適合稀疏圖,但對於我們來說暫時沒有什麼區別啦。prim 演算法中主要注意的點是 在visit...

最小生成樹總結

研究了一天最小生成樹 衍生出來包括最小瓶頸樹,次小生成樹,最小樹形圖之類的演算法,前兩者基本能搞定,最後那個就。不太懂了日後再回去看吧似乎很少用到,抄個模板以備不時之需 先談談最小瓶頸樹 首先注意這兩個定理 命題 無向圖的最小生成樹一定是瓶頸生成樹。命題 瓶頸生成樹不一定是最小生成樹 好了 知道這個...

最小生成樹總結

最小生成樹的性質 1 最小生成樹並不唯一,準確的來說是最小生成樹的樹形並不唯一 2 最小生成樹的權值之和唯一,並且是最小的 3 最小生成樹的邊數 頂點數 1 求最小生成樹有兩種經典演算法 普里姆演算法 prim 和克魯斯卡爾 kruskal 演算法 演算法比較 時間複雜度比較 prim在稠密圖中比k...