🔷 广度优先搜索 (Breadth-First Search, BFS)
-
特点:
- 从图的一个顶点开始,访问其所有相邻的顶点,然后对每个相邻的顶点,再访问它们的邻居。
-
优点:
- 可以找到从起始点到其他所有顶点的最短路径。
- 适用于非加权图。
-
缺点:
- 如果图很大,可能需要大量的内存。
示例:
使用队列实现。将起始节点放入队列中,然后进入循环,直到队列为空。在每次循环中,从队列中取出一个顶点,访问它,然后将所有未访问的邻居加入队列。
🔷 深度优先搜索 (Depth-First Search, DFS)
-
特点:
- 从图的一个顶点开始,尽可能深地搜索图,直到无法进一步为止,然后返回。
-
优点:
- 使用较少的内存。
- 可以找到所有可能的路径。
-
缺点:
- 不一定会得到最短路径。
示例:
使用递归或栈实现。从起始节点开始,访问一个相邻节点,并继续深入,直到没有未访问的相邻节点为止,然后返回。
🔷 Dijkstra’s 算法
-
特点:
- 用于加权图,找到从单源点到其他所有顶点的最短路径。
-
优点:
- 能够得到最短路径。
-
缺点:
- 不能处理负权边。
示例:
使用优先队列。从起始节点开始,更新每个相邻节点的路径长度。选择当前路径最短的节点,然后更新其相邻节点的路径长度。重复此过程,直到所有节点都被访问。
🔷 Floyd-Warshall 算法
-
特点:
- 用于加权图,找到所有顶点对之间的最短路径。
-
优点:
- 可以处理负权边。
- 得到所有顶点对之间的最短路径。
-
缺点:
- 时间复杂度相对较高。
示例:
使用二维数组存储每对顶点之间的最短路径。对于每个顶点,尝试使用它作为中间节点,更新所有顶点对的路径长度。重复此过程,直到所有顶点都被考虑为中间节点。
⚠️ 注意: 图算法在很多领域都有应用,如网络设计、社交网络分析、地图导航等。选择合适的算法取决于具体问题的需求和约束。