无向图基本算法 -- 遍历及最小生成树算法
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算法
Krukal算法首先通过对图中的所有边递增排序,检查顶点u和v是否属于同一棵树,如果不是将u和v合并,最终形成最小生成树。对于下面的无向图生成算法顺序如下:
3.4 Prim算法
个人感觉Prim算法相对于上面算法是比较好理解的。该算法首先从一个顶点开始,寻找还未在最小生成树中的顶点,并且该顶点对于该最小生成树是“安全”的,将该顶点添加到最小生成树中。伪代码如下:
这里面需要注意的是上面需要使用最小优先级队列Q,由于在.net类库中不存在相应的模板类,需要自己实现,可以使用这个版本:/Files/xuqiang/PriorityQueue.rar
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?