public class Main {
static int n = 4, count = 0;
public static void main(String[] args) {
dfs(0, 0);
System.out.println(count);
}
private static void dfs(int i, int j) {
if (i == n) {
count++;
return;
}
if (i < n) {
if (i == j) {
dfs(i + 1, j);
} else {
dfs(i + 1, j);
dfs(i, j + 1);
}
}
}
}
这个代码是使用深度优先搜索(DFS)算法来计算在一个 N x N 的矩阵中,从左上角移动到右下角的所有可能路径的数量。让我逐步解释这个算法:
-
在主函数
main
中,首先定义了一个静态整数n
,表示矩阵的大小(这里为 4 x 4),以及一个count
变量用来记录路径的数量。 -
main
函数调用dfs(0, 0)
,这是深度优先搜索的起始点,即从左上角开始搜索。 -
dfs
函数是核心部分,它接受两个参数i
和j
,表示当前位置的行和列。这个函数通过递归实现深度优先搜索。 -
如果当前位置已经达到矩阵的右下角(即
i == n
),则将count
自增,并返回,表示找到了一条可行路径。 -
如果当前位置未达到矩阵的右边界(即
i < n
),则继续进行搜索。 -
如果
i == j
,说明当前位置在对角线上,因此只能向下移动一步,即调用dfs(i + 1, j)
。 -
如果
i != j
,说明当前位置不在对角线上,可以选择向下或向右移动,因此调用两次dfs
分别尝试向下移动一步和向右移动一步,即dfs(i + 1, j)
和dfs(i, j + 1)
。 -
递归搜索会沿着可能的路径不断探索,直到找到所有的路径或搜索完所有可能的选择。
-
最终,
count
变量中存储的就是从左上角到右下角的所有可能路径的数量。
、