最小生成樹(kruskal)

2021-07-04 03:16:35 字數 626 閱讀 2285

kruskal演算法:

1).記graph中有v個頂點,e個邊

2).新建圖graphnew,graphnew中擁有原圖中相同的e個頂點,但沒有邊

3).將原圖graph中所有e個邊按權值從小到大排序

4).迴圈:從權值最小的邊開始遍歷每條邊 直至圖graph中所有的節點都在同乙個連通分量中

if 這條邊連線的兩個節點於圖graphnew中不在同乙個連通分量中

新增這條邊到圖graphnew中

kruskal與prim的區別:

1.kruskal演算法因為只與邊相關,適合求稀疏圖的最小生成樹;prim演算法只與頂點有關,適合求稠密圖的最小生成樹

2.kruskal演算法在效率上要比prim演算法快,因為kruskal只需要對權重邊做一次排序,而prim演算法則需要做多次排序

3.prim適合採用鄰接矩陣儲存,kruskal適合採用邊目錄方式儲存(輸入時直接告訴a—b的權值為x)

struct edge //邊結構體

e[maxn];

void makeset() //點從1開始編號

}int find(int x)//找x所在的集合

bool cmp(edge x,edge y)

{ return x.w

kruskal 最小生成樹

include include 產生隨機數組用 include 同上 include using namespace std 1 帶權邊的類myarc class myarc bool operator const myarc arc myarc myarc int beginvex,int end...

最小生成樹Kruskal

最小生成樹有兩個特點,乙個是保證了所有邊的和是最小值,另乙個是保證了所有邊中的最大值最小。struct edge bool friend operator edge a,edge b 構邊 vectoredge int id max int mini void initial void input ...

最小生成樹(Kruskal)

在一張圖上有n個點,點與點之間的連線的花費都已經告訴你了,請你設計一下,如果解決這個 最小生成樹 的問題。輸入首先輸入乙個數字n 0 n 100 然後輸入乙個n n的矩陣 其中第i行第j列的數字k表示從點i到點j需要的花費。輸出乙個數字,最少需要多少花費才能使得整張圖任意兩點都直接或者間接連通 也就...