📅  最后修改于: 2023-12-03 14:49:38.756000             🧑  作者: Mango
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。首先,我们将矩阵的第一个元素推入栈中。然后,每次弹出栈顶元素,输出它,并将它下面和右边的元素推入栈中。直到栈为空为止。
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,遍历每个元素。