题目描述:将编号为1~10的10本书排放在书架上,要求编号相邻的书不能放在相邻的位置。
请计算一共有多少种不同的排列方案。
注意,需要提交的是一个整数,不要填写任何多余的内容。
package 图书排列;
public class main {
public static void main(String[] args) {
int arr[]= {1,2,3,4,5,6,7,8,9,10};
sort(arr,0,arr.length-1);
System.out.print(number);
}
static int number=0;
private static void sort(int[] arr, int head, int end) {
if(head==end) {
if(check(arr)) {
number++;
return;
}
}
for(int i=head;i<=end;i++) {
swap(arr,i,head);
sort(arr,head+1,end);
swap(arr,i,head);
}
}
private static boolean check(int[] arr) {
for(int i=1;i<=arr.length-1;i++) {
if(Math.abs(arr[i]-arr[i-1])==1)
return false;
}
return true;
}
private static void swap(int[] arr, int i, int head) {
int w;
w=arr[i];
arr[i]=arr[head];
arr[head]=w;
}}