图论寻路算法详解:基于深度优先搜索 (DFS) 的 Java 实现
图的寻路算法是图论中的基础应用之一,主要用于确定从一个顶点到另一个顶点是否存在路径,以及具体经过哪些节点。深度优先搜索(DFS)是实现这一功能的有效策略,它沿着图的深度方向尽可能远地探索路径。
算法核心思想
DFS 寻路的核心在于'记录'与'回溯'。我们需要知道两个关键信息:当前节点是否被访问过,以及到达当前节点是从哪个前驱节点来的。
- 记录路径:使用
from数组记录每个顶点的前驱顶点。 - 深度优先遍历:从起点开始递归访问所有未访问的邻接顶点。
- 路径回溯:通过
from数组逆向回溯找到完整路径。
为了支撑这些逻辑,我们设计如下数据结构:
visited数组:标记顶点是否已被访问。from数组:存储路径中每个顶点的前驱索引。s:起始顶点的索引。
算法实现详解
1. 核心数据结构定义
在 Java 中,我们需要一个类来封装图引用和状态信息。
private Graph G; // 图的引用
private int s; // 起始点
private boolean[] visited; // 记录访问过的节点
private int[] from; // 记录路径,from[i] 表示 i 的前驱节点
2. 构造函数初始化
初始化时,除了保存图对象,还要重置访问状态。这里有一个关键点:我们在构造时就立即启动 DFS,这样可以在创建对象后直接查询路径,无需额外调用方法。
public Path(Graph graph, int s) {
G = graph;
assert s >= 0 && s < G.V();
visited = new boolean[G.V()];
from = new int[G.V()];
for (int i = 0; i < G.V(); i++) {
visited[i] = false;
from[i] = -1;
}
.s = s;
dfs(s);
}


