本文作者原创,首发在本博客;CSDN 上的同名文章已标注为转载并回链到本页:https://blog.csdn.net/qq_30220519/article/details/141713871
概念
Breadth-First Search (BFS)
目的: 主要用于遍历或搜索图中的所有顶点。
特点: 从根节点开始,先访问所有与之相邻的节点,然后再一层一层地深入。
应用: 可以用来寻找两节点间的最短路径(当边的权重相等时),检测图中是否存在环路,以及层次遍历二叉树等。
数据结构: 使用队列来存储待访问的节点。
Depth-First Search (DFS):
目的: 同样用于遍历或搜索图中的所有顶点。
特点: 从根节点开始,尽可能深地搜索树的分支。
应用: 用于解决连通性问题,如检测环路、拓扑排序、迷宫求解等。
数据结构: 使用栈(可以是递归栈)来存储待访问的节点。
Dijkstra算法
目的: 用于找到图中一个节点到其他所有节点的最短路径。
特点: 要求图中没有负权边,并且是从一个源节点开始计算最短路径。
应用: 寻找两点之间的最短路径,广泛应用于路由算法。
数据结构: 使用优先队列(最小堆)来存储待处理的节点。
Kruskal算法
目的: 用于找到图的最小生成树(Minimum Spanning Tree, MST)。
特点: 是一种贪心算法,适用于边稀疏的图。
应用: 在网络设计中用于构建成本最低的网络连接。
数据结构: 使用并查集(Union-Find)来维护生成树的形成过程。
需要注意的是,Kruskal算法通常不直接用于有向图,因为它主要用于无向图中的最小生成树问题。对于有向图,我们通常考虑的是最短路径问题,而不是生成树问题
用法
1 |
|
参考
https://github.com/Przemyslawmd/Graphs
创作不易,小小的支持一下吧!

