求解最小生成樹

2022-05-28 01:06:11 字數 1093 閱讀 4374

1.prim演算法求解,其思路與dijkstra差不多,不斷貪心往已選定的集合眾新增點,最終得到一棵最小生成樹。具體為什麼最**不清==,

1

int map[105][105];2

int mincost[105];3

int vis[105];4

void

prim()518

if(v==-1) break

;19 vis[v]=1

;20 res+=mincost[v];

21for(u=1;u<=n;u++)

22 mincost[u]=min(map[v][u],mincost[u]);23}

24return

;25 }

view code

2.kruskal演算法求解,首先對所給的邊按照權值大小進行排序,然後從小到大放入到集合中,能否放進去的條件是放入後不會產生圈。此時使用並查集來判斷是否產生圈。也就是判斷放入的這條邊的兩端段是否在同乙個集合當中。

白書裡給的並查集模板:

1

int par[max]; //

記錄父節點,根節點的父節點為本身

2int rank0[max]; //

記錄樹的高度,用於集合的合併

3void

init()410

11}12int find(int

x)13

19void unite(int x,int

y)2034}

35bool same(int x,int

y)36

view code

kruskal:

1

struct

edge

2es[10000];5

inte;

6int

kruskal()719

}20return

sum;

21 }

view code

prim演算法求解最小生成樹

首先滿足樹的條件,各邊權值加起來是最小的,同乙個圖的最小生成樹可能是不同的但是權值之和是一樣的 prim 假設有乙個圖,裡面的頂點可以分為,已近加入樹的和未加入樹的 從第乙個頂點開始,尋找權值最小的邊,然後把這個邊相連的頂點加入,已經在樹的集合內 在這兩個集合相連的節點上尋找權值最小的邊加入和 上 ...

最小生成樹 次小生成樹

一 最小生成樹 說到生成樹首先要解釋一下樹,樹是乙個聯通的無向無環圖,多棵樹的集合則被稱為森林。因此,樹具有許多性質 1.兩點之間的路徑是唯一的。2.邊數等於點數減一。3.連線任意兩點都會生成乙個環。對於乙個無向聯通圖g的子圖,如果它包含g的所有點,則它被稱為g的生成樹,而各邊權和最小的生成樹則被稱...

最小生成樹

package 圖 最小生成樹是用最少的邊吧把所有的節點連線起來。於是和圖的深度優先搜素差不多。class stack public void push int key public int pop 檢視棧頂的元素 public int peek public boolean isempty cla...