資料結構 kruskal演算法 最小生成樹

2022-05-10 17:15:49 字數 1029 閱讀 5276

首先應該理解kruskal演算法思想:在連通圖n=(v,)上,先建立乙個初始狀態為包含n個頂點而無邊的非連通分圖t=(v,{}),在邊集e中找到權值最小的邊,若此邊的兩個頂點落在t的不同的連通分量上,則將邊加入t中,否則捨棄它而選擇下一條代價小的邊。以此類推,直到所有的頂點都落在同一連通分量上即可。

給出原始碼:

1 #include"

iostream"2

using

namespace

std;34

#define max 1000

56 typedef struct

arccell

7arccell,adjmatrix[100][100];//

adj表示邊的權值大小

1112 typedef struct

13mgraph;//

以上均為用鄰矩陣的儲存結構定義圖

1819 typedef struct

node

20 node,dgevalue[100

];25

26int locatevex(mgraph g,char

ch)27

34return

k;35}36

37int creatmatrix(mgraph &g,dgevalue &dgevalue)

38 52

}53 cout<<"

請輸入一條邊兩端的定點及其上權值

"<54for(k=0;k)

55

62return0;

63}6465

void sort(mgraph g,dgevalue &dgevalue)

66 87}88

}89}90

91void creatminitree_kruskal(mgraph g,dgevalue &dgevalue)

92 115

}116

}117

}118

119int

main()

120

《大話資料結構》最小生成樹 Kruskal演算法

2014 6 24 思想 n個節點的圖中,只需要找到權值最小且不與現有邊集合構成環的 n 1 條邊,必成最小生成樹。方案 將邊的權值進行篩選,每次找到權值最小的邊,補充道邊集合中即可。難點 如何確保這些邊不構成環 對每個邊,讓其起始節點是祖先,通過洄游尋根,如果祖先相同說明兩個節點是 近親 會構成閉...

《大話資料結構》之Kruskal演算法

需要先對邊按權重排序,或者每次要查詢最小權重的邊。同時用類似於陣列鍊錶的方式,記錄每個頂點之間的連線關係。因為需要避免形成環路。typedef struct edge int find int parent,int f return f void minispantree kruskal mgrap...

演算法 Kruskal與資料結構 並查集的應用

使用並查集來檢測弧的兩端節點是否連通。include include include include includeusing namespace std 並查集 class union set union set union set int len void create const vector...