无向图基本算法 -- 遍历及最小生成树算法
来源:互联网 发布:淘宝排名 编辑:程序博客网 时间:2024/06/04 19:27
1. 无向图图的表示
2. 无向图遍历算法
3. 最小生成树算法
4. 代码下载
1. 无向图表示
下面的代码中使用的无向图的表示方法和有向图中表示相同。如下:
2.无向图遍历算法
无向图的遍历算法和有向图是类似,具体可以常见上一篇有向图的介绍。
3. 最小生成树算法
3.1 基本概念
在表示最小生成树之前,首先定义最小生成树。设图G= (V, E),对于其中的每条边(u, v) 属于E,定义函数w(u, v)为连接u和v的代价,定义最小生成树T(E的子集),T连接所有的顶点,并且权值最小。
3.2 算法思想
最小生成树的基本算法采用“贪心策略”。我们初始化一个集合T,然后在每次迭代保证向T中加入边后,A仍然能够保证最小特性。算法的思想基本如下:
那么现在剩下了一个问题,如何得到上面算法中的(u, v),保证A仍然是最小生成树的一部分。这里用到了“割”的概念。无向图G=(V, E)的一个割是V的一个划分,如下。
如果一条边是通过某个“割”的所有边的最小边的话,就是我们上面寻找的(u, v)。 下面的两种算法Krukal和Prim算法都是对上面算法思想的具体实现。
3.3 Krukal算法
3.4 Prim算法
个人感觉Prim算法相对于上面算法是比较好理解的。该算法首先从一个顶点开始,寻找还未在最小生成树中的顶点,并且该顶点对于该最小生成树是“安全”的,将该顶点添加到最小生成树中。伪代码如下:
这里面需要注意的是上面需要使用最小优先级队列Q,由于在.net类库中不存在相应的模板类,需要自己实现,可以使用这个版本:/Files/xuqiang/PriorityQueue.rar
4. 代码下载
/Files/xuqiang/UnDirectedGraphTest.rar
作者:许强1. 本博客中的文章均是个人在学习和项目开发中总结。其中难免存在不足之处 ,欢迎留言指正。2. 本文版权归作者和博客园共有,转载时,请保留本文链接。
- 无向图基本算法 -- 遍历及最小生成树算法
- prime算法求无向图的最小生成树
- 贪心算法_无向图最小生成树*
- 无向网图的最小生成树--普里姆算法
- 无向图的最小生成树(prim算法)
- 无向图最小生成树(prim算法)
- 无向带权图的最小生成树算法——Prim及Kruskal算法思路
- 无向带权图的最小生成树算法——Prim及Kruskal算法思路
- 图基本算法:深度广度遍历最小生成树
- 无向网的最小生成树(Prim算法)
- 无向网的最小生成树(Kruskal算法)
- 图:最小生成树:prim算法 普里姆算法 ,(无向图的实现)
- 无向图的最小生成树算法的C程序实现代码(Prim算法)
- 无向网图的最小生成树算法--克鲁斯卡尔算法
- 51nod 1212 无向图最小生成树(prim算法和kruska算法) 新手小结
- 求无向连通图的最小生成树算法——Prim与Kruska
- Java写无向图的基于DFS的最小生成树算法
- 无向图的最小生成树(克鲁斯卡尔算法 Kruskal)
- android sd卡读取图片 并处理大图
- C# yield关键字
- 不适用变量实现c语言的strlen函数
- 邂逅的工具软件,有时间再去尝试!
- 一种简单的本地cache的实现
- 无向图基本算法 -- 遍历及最小生成树算法
- 对Objective-c委托的理解
- 1. objC 动态类型(dynamic typing)
- 有向图基本算法 -- 遍历算法
- 编程心得
- 自定制VS插件(一)--LearnVSXNow! - #1: 如何开始VS扩展包(VSX/VS SDK)的编程?
- Rabin-Miller概率素数检验算法
- C++编程必备
- Hello, MYSQL FULLTEXT SEARCH