如下的10个格子
填入0~9的数字。要求:连续的两个数字不能相邻。
(左右、上下、对角都算相邻)
一共有多少种可能的填数方案?
public class Main {
static boolean[] book = new boolean[10];
static int[][] map = new int[3][4];
static int ans;
public static void main(String[] args) {
map[0][0] = map[2][3] = -2;
dfs(0, 1);
System.out.println(ans);
}
static void dfs(int x, int y) {
if (map[x][y] == -2) {
ans++;
} else {
for (int i = 0; i <= 9; i++) {
if (!book[i] && check(i, x, y)) {
book[i] = true;
map[x][y] = i;
dfs(x + (y + 1 == 4 ? 1 : 0), (y + 1) % 4);
book[i] = false;
}
}
}
}
static boolean check(int i, int x, int y) {
if (y - 1 >= 0 && Math.abs(map[x][y - 1] - i) == 1) // left
return false;
if (x - 1 >= 0 && Math.abs(map[x - 1][y] - i) == 1) // up
return false;
if (x - 1 >= 0 && y - 1 >= 0 && Math.abs(map[x - 1][y - 1] - i) == 1) // leftUp
return false;
if (x - 1 >= 0 && y + 1 < 4 && Math.abs(map[x - 1][y + 1] - i) == 1) // RightUp
return false;
return true;
}
}