标题:图书排列
将编号为1~10的10本书排放在书架上,要求编号相邻的书不能放在相邻的位置。
请计算一共有多少种不同的排列方案。
注意,需要提交的是一个整数,不要填写任何多余的内容。
答案:479306
分析
- 简单题,只要dfs求出所有的排列情况,然后筛选出满足条件的排列情况并计算数目即可。
- 注意点:如果不放心自己求出的结果,可以把满足条件的情况输出,方便排错。
//发现我会写全排列hhh
代码如下
public class Main {
public static boolean visit[]=new boolean[10];
public static int a[]=new int [10];
public static int ans=0;
public static boolean check() {
for(int i=0;i<9;i++)
if(a[i]==a[i+1]+1 || a[i]==a[i+1]-1)
return false;
return true;
}
public static void dfs(int x) {
if(x==10) {
if(check()) {
ans++;
// output conditions
// for(int i=0;i<10;i++)
// System.out.print(a[i]+" ");
// System.out.println();
}
return;
}
for(int i=0;i<10;i++) {
if(!visit[i]) {
visit[i]=true;
a[x]=i;
dfs(x+1);
visit[i]=false;
}
}
}
public static void main(String[] args) {
dfs(0);
System.out.println(ans);//output the result
}
}