最小生成樹問題

2021-07-27 05:28:45 字數 665 閱讀 8086

最小生成樹

1.是一棵樹

2.無迴路

3.n個頂點一定有n-1條邊

4.包含全部頂點

5.n-1條邊都在圖里

6.邊的權重和最小

生成約束:

1.只能用圖里有的邊

2.只能正好用掉n-1條邊

3.不能有迴路

主要演算法

prim演算法 -- 讓樹長大

int prim(int n)  

int ans = 0;//距離權值總和

vis[1] = true;//生成樹的根(起點)標記訪問過

for(int i=2; i<=n; i++)//要生成n-1條邊,所以迴圈n-1次

} ans += min;//加上找到的最小權值

vis[pos] = true;//標記找到的該點被訪問

for(int j=1; j<=n; j++)//更新dis陣列

} }

return ans;//得出權值總和

}

kruskal演算法 ——— 將森林變為樹

最小生成樹問題

1.構造可以使n個城市連線的最小生成樹。問題描述 給定乙個地區的n個城市間的距離網,用prim演算法或kruskal演算法建立最小生成樹,並計算得到的最小生成樹的代價。4 要求 1 城市間的距離網採用鄰接矩陣表示,鄰接矩陣的儲存結構定義採用課本中給出的定義,若兩個城市之間不存在道路,則將相應邊的權值...

最小生成樹問題

最小生成樹 乙個有n個點的圖,邊一定是大於等於n 1條的。圖的最小生成樹,就是在這些邊中選擇n 1條出來,連線所有的n個點。這n 1條邊的邊權之和是所有方案中最小的。最小生成樹用來解決什麼問題?就是用來解決如何用最小的 代價 用n 1條邊連線n個點的問題。例題 洛谷p3366 乾坤大挪移 最小生成樹...

最小生成樹問題

最小生成樹問題一般對應無向圖,一般都有m n n,所以mlogm和mlogn差不多,所以我們一般用kruskal而不常用堆優化的prim 1.樸素版primo n2 基本思路 初始化 dis i 正無窮大 for i 0 i n次迭代,因為要加入n個點到集合中 t 找到集合外距離最近的點 用 t 更...