方格填数

185 阅读1分钟

题目

如下的10个格子 image.png 填入0~9的数字。要求:连续的两个数字不能相邻。 (左右、上下、对角都算相邻)

一共有多少种可能的填数方案?

请填写表示方案数目的整数。 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

分析:

全排列出所有的填数情况,
对每种情况进行检查,
符合条件计数+1;
答案是1580\

代码


public class F方格填数 {
	public static int count=0;
	public static int arr[]={0,1,2,3,4,5,6,7,8,9};
	public static void check(){
		int buf[][]=new int[3][4];
		buf[0][0]=1000;buf[2][3]=1000;
		int k=0;
		for(int i=0;i<3;i++){
			for(int j=0;j<4;j++){
				if((i==0&&j==0)||(i==2&&j==3))continue;
				buf[i][j]=arr[k];
				k++;
			}
		}
		for(int x=0;x<3;x++){
			for(int y=0;y<4;y++){
				for(int i=-1;i<2;i++){
					for(int j=-1;j<2;j++){
						if(x+i>=0&&y+j>=0&&x+i<3&&y+j<4&&Math.abs(buf[x+i][y+j]-buf[x][y])==1){
							return ;
						}
					}
				}
			}
		}
		count++;
		
	}
	public static void qpl(int k){
		if(k==10)check();
		else{
			for(int i=k;i<arr.length;i++){
				int t=arr[k];arr[k]=arr[i];arr[i]=t;
				qpl(k+1);
				t=arr[k];arr[k]=arr[i];arr[i]=t;
			}
		}
	}
	public static void main(String[] args) {
		qpl(0);
		System.out.println(count);
	}
}