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