将编号为 11 ~ 1010 的 1010 本书排放在书架上,要求编号相邻的书不能放在相邻的位置。
请计算一共有多少种不同的排列方案。
import java.util.*;
public class Main {
static int []arr= {1,2,3,4,5,6,7,8,9,10};
static int count_num=0;
public static void DFS(int i,boolean root[],int x[]) {
if(i>=10) {
count_num++;
return;
}
else {
for(int j=0;j<10;j++) {
if(i==0||(Math.abs(arr[j]-x[i-1])!=1&&!root[j])){
x[i]=arr[j];
root[j]=true;
DFS(i+1,root,x);
x[i]=0;
root[j]=false;
}
}
}
}
public static void main(String[] args) {
boolean []root=new boolean[10];
int []x=new int[10];
DFS(0,root,x);
System.out.print(count_num);
}
}