题目
参考
import java.util.Scanner;
public class Main {
static int[][] vis;
static int m, n, k;
static int res = 0;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 输入 m, n, k
m = scanner.nextInt();
n = scanner.nextInt();
k = scanner.nextInt();
// 初始化数组
vis = new int[n][m];
// 从(0,0)点开始遍历
dfs(0, 0);
// 输出结果
System.out.println(res);
}
// 计算数位和
private static int get(int num) {
int sum = 0;
while (num > 0) {
sum += num % 10;
num /= 10;
}
return sum;
}
// 深度优先搜索
private static void dfs(int x, int y) {
if (x < 0 || x >= n || y < 0 || y >= m || vis[x][y] == 1) { // 越界和是否遍历过判断
return;
}
vis[x][y] = 1;
if (get(x) + get(y) > k) { // 数位和大于k直接结束
return;
}
res++; // 更新答案
dfs(x, y - 1);
dfs(x, y + 1);
dfs(x + 1, y);
dfs(x - 1, y); // 遍历四个方向
}
}