Java 图的深度优先遍历

1. 流程图

stateDiagram
    [*] --> 初始化
    初始化 --> 选择起始节点
    选择起始节点 --> 遍历节点
    遍历节点 --> 结束

2. 步骤及代码示例

1. 初始化

在开始深度优先遍历之前,需要初始化图的数据结构和访问标记。

// 创建一个图的表示,这里使用邻接表来表示图
List<List<Integer>> graph = new ArrayList<>();
// 初始化访问标记数组,用来标记节点是否被访问过
boolean[] visited = new boolean[graph.size()];

2. 选择起始节点

通常从图中的某个节点开始深度优先遍历,可以选择其中任意一个节点作为起始节点。

int startNode = 0; // 选择节点0作为起始节点

3. 遍历节点

深度优先遍历的核心是递归访问每个节点的邻居节点,并标记已访问。

void dfs(int node) {
    visited[node] = true; // 标记节点已访问
    for (int neighbor : graph.get(node)) {
        if (!visited[neighbor]) {
            dfs(neighbor); // 递归访问邻居节点
        }
    }
}
// 从起始节点开始深度优先遍历
dfs(startNode);

4. 结束

当所有节点都被访问过后,深度优先遍历结束。

3. 类图

classDiagram
    Graph --> List
    List --> ArrayList
    Graph --> boolean[]
    boolean[] --> visited

通过以上步骤和代码示例,你可以实现 Java 图的深度优先遍历。记得理解递归的关键思想,并在遍历过程中正确标记节点的访问状态。祝你早日掌握这一技能,加油!