//我又来水博客啦
1. 题目
2. 题解
状态压缩、搜索。
具体解释见 https://www.mina.moe/?p=362
代码:
#include <bits/stdc++.h>
using namespace std;
int n,ans,w[15],wcnt;
void dfs(int m,int a,int b,int c)
{
if(m>n)
{
if(wcnt<3)
{
for(int i=1;i<=n;i++)printf("%d ",w[i]);
wcnt++,printf("\n");
}
ans++;return;
}
for(int i=1,j=2;i<=n;i++,j<<=1)
if((a&j)==0&&(b&j)==0&&(c&j)==0)
w[m]=i,dfs(m+1,(a|j),(b|j)<<1,(c|j)>>1);
}
int main()
{
scanf("%d",&n),dfs(1,0,0,0),printf("%d\n",ans);
return 0;
}
0 条评论