📜  使用 DFS 遍历打印矩阵元素(1)

📅  最后修改于: 2023-12-03 14:49:38.756000             🧑  作者: Mango

使用 DFS 遍历打印矩阵元素

DFS(深度优先搜索)是一种常见的图遍历算法,可以通过递归或栈实现。在矩阵中,我们也可以使用 DFS 遍历它的每个元素。

算法思路
使用递归实现 DFS

我们可以先遍历矩阵的第一行,对于每个元素,我们先输出它,然后继续访问它下面的元素。当到达最后一行时,回溯到上一行,并访问它下一个元素。我们可以使用递归实现这个过程。

void dfs(int[][] matrix, int i, int j) {
    // 输出当前元素
    System.out.print(matrix[i][j] + " ");
    if (i == matrix.length - 1 && j == matrix[0].length - 1) {
        // 到达最后一个元素,返回
        return;
    }
    if (i < matrix.length - 1) {
        // 继续访问下面的元素
        dfs(matrix, i + 1, j);
    }
    if (j < matrix[0].length - 1) {
        // 继续访问右边的元素
        dfs(matrix, i, j + 1);
    }
}
使用栈实现 DFS

我们也可以使用栈来实现 DFS。首先,我们将矩阵的第一个元素推入栈中。然后,每次弹出栈顶元素,输出它,并将它下面和右边的元素推入栈中。直到栈为空为止。

void dfs(int[][] matrix) {
    Stack<int[]> stack = new Stack<>();
    stack.push(new int[] {0, 0});
    while (!stack.empty()) {
        int[] p = stack.pop();
        int i = p[0], j = p[1];
        System.out.print(matrix[i][j] + " ");
        if (i == matrix.length - 1 && j == matrix[0].length - 1) {
            // 到达最后一个元素,返回
            return;
        }
        if (i < matrix.length - 1) {
            // 将下面的元素推入栈中
            stack.push(new int[] {i + 1, j});
        }
        if (j < matrix[0].length - 1) {
            // 将右边的元素推入栈中
            stack.push(new int[] {i, j + 1});
        }
    }
}
总结

DFS 是一种常见的遍历算法,适用于解决许多图论和树论问题。在矩阵中,我们可以使用递归或栈实现 DFS,遍历每个元素。