最小生成树算法——Kruskal
来源:互联网 发布:提取文本软件 编辑:程序博客网 时间:2024/05/17 22:47
Kruskal算法的原理是先将图中的所有边按照权从小到大排序,然后循环取边,判断添加上该边后是子图中否有闭合回路,如果没有,则添加该边,否则舍弃该边。直到所有的边都遍历一遍。我认为该算法的核心是排序和判断闭合。
下面是具体的代码:
下面是具体的代码:
#include <iostream>#include <vector>#include <algorithm>#include <set>struct path { int start ; int end ; int weight ;};static bool compare( path pi, path pj){ return pi.weight < pj.weight;}static int find( const std::vector <int>& array, int i){ while(array[i]) i = array[i]; return i;}int main(){ std:: vector<int> vertexs; std:: vector<path > paths; std::cout << "请输入顶点数:" << std::flush; int sum; std::cin >> sum; int tmp; for(int i = 0; i != sum; ++i){ vertexs.push_back(tmp); } std::cout << "请输入边数:" << std::flush; std::cin >> sum; for(int i = 0; i != sum; ++i){ path p; std::cin >> p. start >> p.end >> p.weight; paths.push_back(p); } std::sort(paths.begin(), paths.end(), compare); std:: vector<int> array(vertexs.size(), 0); for(size_t i = 0; i != paths.size(); ++i){ int m = find(array, paths[i].start ); int n = find(array, paths[i].end ); if(m != n){ array[m] = n; std::cout << paths[i].start << "->" << paths[i]. end << std::endl; } }}
本文链接:http://blog.csdn.net/girlkoo/article/details/17435951
本文作者:girlkoo
0 0
- 最小生成树——Kruskal算法
- 最小生成树算法——Kruskal
- 最小生成树——Kruskal算法
- 最小生成树——Kruskal算法
- 最小生成树——Kruskal算法
- 最小生成树——Kruskal算法
- 最小生成树—Kruskal 算法
- 算法——最小生成树:Kruskal算法、Prim算法
- 最小生成树算法—Kruskal算法和Prim算法
- C# 生成最小生成树——kruskal算法
- 最小生成树算法——Kruskal算法Java实现
- 最小生成树——Kruskal算法 和 Prim算法
- 最小生成树算法——Kruskal算法
- 最小生成树—kruskal算法和prim算法
- 最小生成树—Prim算法和Kruskal算法
- 最小生成树—Prim算法和Kruskal算法 (理解)
- 数据结构——邻接矩阵的最小生成树Kruskal算法
- 《大话数据结构》最小生成树——Kruskal算法
- 自带样式修改
- Android编译系统详解 配置文件
- NOR NAND FLASH编程
- tmux的使用方法和个性化配置
- ArcInfo实现数据同步复制【二】子到父同步
- 最小生成树算法——Kruskal
- 自动跳转文本
- 详解C/C++预处理器
- iOS代码技巧之判断设备及状态
- jQuery Mobile
- 全志A10 buildroot 编译Qt 出现的问题
- 自做算法导论第一章练习题
- wince SAPI 学习2
- Jquery 将表单序列化为Json对象.同时提交多个表单的参数