图的寻路算法详解:基于深度优先搜索 (DFS) 的实现
一、寻路算法概述
图的寻路算法是图论中的基础算法之一,用于找到从一个顶点到另一个顶点的路径。深度优先搜索 (DFS) 是实现寻路算法的一种有效方法,它沿着图的深度方向尽可能远地搜索路径。
DFS 寻路示例
假设有一个图,从顶点 0 到顶点 6 的 DFS 路径可能是:0 → 1 → 4 → 6。
二、算法核心思想
- 记录路径:使用
from数组记录每个顶点的前驱顶点。 - 深度优先遍历:从起点开始递归访问所有未访问的邻接顶点。
- 路径回溯:通过
from数组逆向回溯找到完整路径。
数据结构设计
G:图的引用s:起始顶点visited:布尔数组,记录顶点是否被访问过from:整型数组,记录路径中每个顶点的前驱顶点- 方法:
dfs(int v),hasPath(int w),path(int w),showPath(int w)
三、算法实现详解
1. 核心数据结构
visited数组:记录顶点是否被访问过from数组:记录路径中每个顶点的前驱顶点s:起始顶点
2. 构造函数初始化
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;
}
this.s = s;
dfs(s);
}
3. DFS 实现
private void dfs {
visited[v] = ;
( i : G.adj(v)) {
(!visited[i]) {
from[i] = v;
dfs(i);
}
}
}


