方格填数
如下的10个格子
填入0~9的数字。
要求:连续的两个数字不能相邻。 (左右、上下、对角都算相邻)
一共有多少种可能的填数方案?
请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
答案: (15分)
public class T4fangge {
static int [][]a=new int [3][4];
static int []visited={0,0,0,0,0,0,0,0,0,0};
static int ans=0;;
public static boolean judge() {
for(int i=0;i<3;i++)
for(int j=0;j<3;j++){
if(Math.abs(a[i][j]-a[i][j+1])==1) //左右
return false;
}
for(int i=0;i<2;i++)
for(int j=0;j<4;j++){
if(Math.abs(a[i+1][j]-a[i][j])==1) //上下
return false;
}
for(int i=0;i<2;i++)
for(int j=0;j<3;j++){
if(Math.abs(a[i+1][j+1]-a[i][j])==1) //对角
return false;
}
for(int i=2;i>0;i--)
for(int j=0;j<3;j++){
if(Math.abs(a[i][j]-a[i-1][j+1])==1) //对角
return false;
}
return true;
}
public static void dfs(int x,int y) {
if(x==2&&y==3&&judge())
{
ans++;
return;
}
for(int i=0;i<=9;i++){
if(visited[i]==0){
a[x][y]=i;
visited[i]=1; //标记,表示该位置已经有值
if(y<3)
dfs(x,y+1); //按从左到右的顺序
if(y==3)
dfs(x+1,0); //转到下一行
visited[i]=0; //重新置0,开始尝试下一种可能
}
}
}
public static void main(String[] args) {
a[0][0]=-9;a[2][3]=-9; //没有的位置置为0
dfs(0,1);
System.out.print(ans);
}
}