方格填数
如下的10个格子
填入0~9的数字。要求:连续的两个数字不能相邻。
(左右、上下、对角都算相邻)
一共有多少种可能的填数方案?
请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
这道题还是先全排列,然后进行check检查,符合要求的counts++,还好只有十个格子,一一检测就行。
public class Main{
public static int counts=0;
public static void main(String[]arms) {
int[] nums= {
0,1,2,3,4,5,6,7,8,9};
arr(nums, 0);
System.out.println(counts);
}
public static void arr(int[]nums,int i) {
if(i>=nums.length-1) {
if(check(nums))counts++;
return;
}
for(int j=i;j<nums.length;j++) {
sweap(nums, i, j);
arr(nums,i+1);
sweap(nums, i, j);
}
}
public static void sweap(int[]nums,int a,int b) {
int temp=0;
temp=nums[a];
nums[a]=nums[b];
nums[b]=temp;
}
public static boolean check(int[]nums) {
if ( abs(nums[0] - nums[1]) == 1 || abs(nums[0] - nums[3]) == 1 ||
abs(nums[0] - nums[4]) == 1 || abs(nums[0] - nums[5]) == 1 ||
abs(nums[1] - nums[2]) == 1 || abs(nums[1] - nums[4]) == 1 ||
abs(nums[1] - nums[5]) == 1 || abs(nums[1] - nums[6]) == 1 ||
abs(nums[2] - nums[5]) == 1 || abs(nums[2] - nums[6]) == 1 ||
abs(nums[3] - nums[4]) == 1 || abs(nums[3] - nums[7]) == 1 ||
abs(nums[3] - nums[8]) == 1 || abs(nums[4] - nums[5]) == 1 ||
abs(nums[4] - nums[7]) == 1 || abs(nums[4] - nums[8]) == 1 ||
abs(nums[4] - nums[9]) == 1 || abs(nums[5] - nums[6]) == 1 ||
abs(nums[5] - nums[8]) == 1 || abs(nums[5] - nums[9]) == 1 ||
abs(nums[6] - nums[9]) == 1 || abs(nums[7] - nums[8]) == 1 ||
abs(nums[8] - nums[9]) == 1)
return false;
return true;
}
private static int abs(int i) {
return Math.abs(i);
}
}
最终答案1580