首先應該理解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...