将编号为1~10的10本书排放在书架上,要求编号相邻的书不能放在相邻的位置。
请计算一共有多少种不同的排列方案。
注意,需要提交的是一个整数,不要填写任何多余的内容。
答案:
代码:
#include <iostream> #include <cstdio> #include <vector> using namespace std; bool vis[11]; int c; void dfs(int k,int last) { if(k >= 10) { c ++; return; } for(int i = 1;i <= 10;i ++) { if(vis[i] || abs(i - last) == 1) continue; vis[i] = true; dfs(k + 1,i); vis[i] = false; } } int main() { dfs(0,-1); printf("%d",c); return 0; }