标题:图书排列
将编号为1~10的10本书排放在书架上,要求编号相邻的书不能放在相邻的位置。
请计算一共有多少种不同的排列方案。
注意,需要提交的是一个整数,不要填写任何多余的内容。
#include <bits/stdc++.h>
using namespace std;
int main() {
int b[]={1,2,3,4,5,6,7,8,9,10},i,count=0;
while(next_permutation(b,b+10)) {
for(i=0;i<9;i++)
if(abs(b[i]-b[i+1])==1) break;
if(i==9) count++;
}
cout<<count<<endl;
return 0;
}
public class 图书排列 {
static int book[] = new int[12];
static boolean visited[] = new boolean[12];
static int count = 0;
static void dfs(int k) {
if(k==11) {
for(int i=1;i<10;i++)
if(Math.abs(book[i]-book[i+1])==1) return;
count++;
}
for(int i=1;i<=10;i++) {
if(!visited[i]) {
visited[i]=true;
book[k]=i;
dfs(k+1);
visited[i]=false;
}
}
}
public static void main(String[] args) {
dfs(1);
System.out.println(count);
}
}
答案:479306
本题收录在我的另一篇文章《数的搜索-题目汇总》