解题思路
枚举16个格子每个位置放1号的情况,递归展开在该位置放1号之后的选择。
int res = 0;
void test(){
boolean[][] isVisited = new boolean[4][4];
//枚举每一个位置都是1,即蛇的头部
for(int i = 0;i < 4;i++){
for(int j = 0;j <4;j++){
rec(isVisited,i,j,0);
isVisited = new boolean[4][4];
}
}
return res;
}
void rec(boolean[][] isVisited,int x,int y,int index){
//每一个格子都填充完了
if(index == 16){
res++;
return;
}
//越界或者已经访问过了
if(x < 0 || y < 0 || x > arr.length || y > arr[0].length || isVisited[x][y]){
return;
}
isVisited[x][y] = true;
rec(isVisited,x+1,y,index+1);
rec(isVisited,x-1,y,index+1);
rec(isVisited,x,y+1,index+1);
rec(isVisited,x,y-1,index+1);
isVisited[x][y] = false;
}