Skip to content

深度优先搜索,用于遍历或搜索树和图结构的算法。 从起始位置开始,沿着每条可能得路径尽可能深入探索分支,直到不能前进。然后回溯并继续探索其他路径。

应用场景

  • 排列组合
  • 网络爬虫
  • 迷宫求解
  • 路径查找
  • 连通性检测
  • 拓扑排序
  • 图遍历
  • 文件系统遍历
  • 图像处理

示例代码

DFS 递归

java
public class MazeSolver {
    private static final int[] ROW_MOVES = { -1, 1, 0, 0 };
    private static final int[] COL_MOVES = { 0, 0, -1, 1 };
    private static final char PATH = 'P';
    private static final char VISITED = 'V';
    private static final char WALL = 'W';
    private static final char EXIT = 'E';

    public static boolean solveMaze(char[][] maze, int row, int col) {
        if (!isValidMove(maze, row, col)) return false;

        if (maze[row][col] == EXIT) return true;

        maze[row][col] = VISITED;

        for (int i = 0; i < 4; i++) {
            int newRow = row + ROW_MOVES[i];
            int newCol = col + COL_MOVES[i];
            if (solveMaze(maze, newRow, newCol)) {
                maze[row][col] = PATH;
                return true;
            }
        }

        return false;
    }

    private static boolean isValidMove(char[][] maze, int row, int col) {
        return row >= 0 && row < maze.length && col >= 0 && col < maze[0].length && maze[row][col] != WALL && maze[row][col] != VISITED;
    }

    public static void main(String[] args) {
        char[][] maze = {
            { 'S', ' ', 'W', ' ', ' ' },
            { ' ', 'W', ' ', 'W', ' ' },
            { ' ', ' ', ' ', ' ', ' ' },
            { 'W', 'W', 'W', ' ', 'W' },
            { ' ', ' ', ' ', ' ', 'E' }
        };

        if (solveMaze(maze, 0, 0)) {
            System.out.println("Path found!");
            for (char[] row : maze) {
                System.out.println(Arrays.toString(row));
            }
        } else {
            System.out.println("No path found.");
        }
    }
}

waitingresult.com