算法导论-第23章-最小生成树:Kruskal算法(基于按秩合并、路径压缩的不相交集合)C++实现
来源:互联网 发布:dmp导入oracle数据库 编辑:程序博客网 时间:2024/04/28 03:05
#include <iostream>#include <vector>#include <algorithm>using namespace std;static char elements_index{ 'a' };using P = pair<char, char>;using PP = pair<P, int>;struct Element {char index{ elements_index++ };int rank{ 0 };Element* parent{ this };};Element* FIND_SET(Element* x) {if (x != x->parent) {x->parent = FIND_SET(x->parent);}return x->parent;}void LINK(Element* x, Element* y) {if (x->rank > y->rank) {y->parent = x;}else {x->parent = y;if (x->rank == y->rank) {y->rank++;}}}void UNION(Element* x, Element* y) {LINK(FIND_SET(x), FIND_SET(y));}vector<P> MST_KRUSKAL(vector<PP>& v, Element* E) {vector<P> A{};for (auto edge : v) {if (FIND_SET(&E[edge.first.first - 'a']) != FIND_SET(&E[edge.first.second - 'a'])) {A.push_back({ edge.first.first, edge.first.second });UNION(&E[edge.first.first - 'a'], &E[edge.first.second - 'a']);}}return A;}int main(int argc, char* argv[]) {size_t vertex_size{};cout << "please input the numbers of vertex :" << endl;cin >> vertex_size;vector <PP> v{};char v0{};char v1{};int weight{};cout << "please input the edge as : v0 v1 weight( end up with 0 0 0 )" << endl;while (true) {cout << "edge :" << endl;cin >> v0 >> v1 >> weight;if (v0 == '0' || v1 == '0' || weight == 0) {break;}P p{ v0, v1 };PP pp{ p, weight };v.push_back(pp);}sort(v.begin(), v.end(), [](const PP& x, const PP& y){ return x.second < y.second; });Element* E = new Element[vertex_size]{};vector<P> result = MST_KRUSKAL(v, E);cout << "MST has edges as follow :" << endl;for (auto a : result) {cout << a.first << " " << a.second << endl;}delete[]E;return 0;}
0 0
- 算法导论-第23章-最小生成树:Kruskal算法(基于按秩合并、路径压缩的不相交集合)C++实现
- 算法导论-第23章-最小生成树:Prime算法(基于vector)的C++实现
- 算法导论-带路径压缩的不相交集合C++实现
- 算法导论 第23章 最小生成树 ,Kruskal算法,和Prim算法d
- 《算法导论》笔记 第21章 *21.4 带路径压缩的按秩合并的分析
- 配合Kruskal算法不相交集合实现文件C语言
- 用于不相交集合的数据结构(算法导论第21章-并查集)
- 算法导论--最小生成树(Kruskal和Prim算法)
- 算法导论 ch23 最小生成树 Kruskal
- 算法导论 最小生成树MST-KRUSKAL
- C语言实现图的Kruskal最小生成树算法
- 最小生成树(算法导论第23章)
- 数据结构(C实现)------- 最小生成树之Kruskal算法
- Kruskal最小生成树算法代码实现(c++)
- 最小生成树Kruskal算法的实现
- 算法导论代码 第21章 用于不相交集合的数据结构
- 算法导论 第21章 用于不相交集合的数据结构
- 《算法导论》笔记 第21章 21.1 不相交集合上的操作
- jdbcType与javaType
- 关于网站504问题排查
- Oracle 外连接和 (+)号的用法
- Bitmap的秘密
- linux下常用命令
- 算法导论-第23章-最小生成树:Kruskal算法(基于按秩合并、路径压缩的不相交集合)C++实现
- ClearEditText
- 略谈 GCC __attribute__
- html
- 紫外线杀菌器:TROJAN紫外线杀菌器的技术优势及应用领域
- PL/SQL之基础篇
- sharepoint服务器中切换用户帐号
- 《玩转细粒度权限管理》 三,用户角色权限RBCA
- 开博首篇