如下的10个格子
(如果显示有问题,也可以参看【图1.jpg】)
填入0~9的数字。要求:连续的两个数字不能相邻。
(左右、上下、对角都算相邻)
一共有多少种可能的填数方案?
请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
public class FangGeTS {
private int visit[];
private int value[];
private static int num;
private int n;
public FangGeTS(){
n=11;
visit=new int[n];//设置标志位
value=new int[n];//存储数值
num=0;
for(int i=0;i<n;i++)
{
visit[i]=0;//标志位为0,则未访问
}
}
public void BackTrace(int i){
if(i>10)
{//判定是否符合条件,绝对值大于1
if(Math.abs(value[1]-value[2])>1 && Math.abs(value[1]-value[4])>1 && Math.abs(value[1]-value[5])>1 &&
Math.abs(value[2]-value[3])>1 && Math.abs(value[2]-value[4])>1 && Math.abs(value[2]-value[5])>1 && Math.abs(value[2]-value[6])>1 &&
Math.abs(value[3]-value[5])>1 && Math.abs(value[3]-value[6])>1 && Math.abs(value[3]-value[7])>1 &&
Math.abs(value[4]-value[5])>1 && Math.abs(value[4]-value[8])>1 &&
Math.abs(value[5]-value[6])>1 && Math.abs(value[5]-value[8])>1 && Math.abs(value[5]-value[9])>1 &&
Math.abs(value[6]-value[7])>1 && Math.abs(value[6]-value[8])>1 && Math.abs(value[6]-value[9])>1 && Math.abs(value[6]-value[10])>1 &&
Math.abs(value[7]-value[9])>1 && Math.abs(value[7]-value[10])>1 &&
Math.abs(value[8]-value[9])>1 && Math.abs(value[9]-value[10])>1)
{
num++;//结果加1
for(int k=1;k<=10;k++)
{
System.out.print(value[k]+" ");
}
System.out.println();
}
}
else{
for(int j=0;j<=9;j++){
if(visit[j]==0)
{//判定当前方格是否已访问
value[i]=j;//赋值
visit[j]=1;//该格子已访问并赋值
BackTrace(i+1);//递归至下一层
visit[j]=0;//回溯至上一层,复原标识
}
}
}
}
public static void main(String[] args) {
FangGeTS fg=new FangGeTS();
fg.BackTrace(1);
System.out.println(num);
}
}
答案:1580