暴力枚举dfs
package 测试;
public class 玩具蛇 {
static int count;
static int[][] route = {
{0, 1},
{0, -1},
{1, 0},
{-1, 0}
};
static int[][] temp = new int[4][4];
public static void main(String[] args) {
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
temp[i][j] = 1;
dfs(i, j, 1);
//清零
clean(temp);
}
}
System.out.println(count);
}
private static void dfs(int x, int y, int ans) {
if (ans == 16) {
for (int[] ints : temp) {
for (int i : ints) {
if (i == 0)
return;
}
}
count++;
return;
}
for (int i = 0; i < route.length; i++) {
int x1 = x + route[i][0];
int y1 = y + route[i][1];
if (x1 < 0 || y1 < 0 || x1 >= 4 || y1 >= 4) continue;
if (temp[x1][y1] != 0) continue;
temp[x1][y1] = ans + 1;
dfs(x1, y1, ans + 1);
temp[x1][y1] = 0;
}
}
private static void clean(int[][] arr) {
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[0].length; j++) {
arr[i][j] = 0;
}
}
}
private static void print(int[][] arr) {
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[0].length; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
}