洛谷 P1219 [USACO1.5]八皇后 Checker Challenge
标签:搜索 深度优先搜索(DFS) 高性能
#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;
int n,cnt;
bool lie[20];//列
bool leftxie[40];//从右上到左下
bool rightxie[40];//从左上到右下
int a[20];
void pr()
{
if(cnt<3)
{
for(int i=1;i<n;i++)
{
printf("%d ",a[i]);
}
printf("%d\n",a[n]);
}
}
void dfs(int x){
if(x>n)
{
pr();
cnt++;
return;
}
for(int i=1;i<=n;i++)
{
if(!lie[i]&&!leftxie[x-i+n]&&!rightxie[x+i])
{
lie[i]=1;
leftxie[x-i+n]=1;
rightxie[x+i]=1;
a[x]=i;
dfs(x+1);
lie[i]=0;
leftxie[x-i+n]=0;
rightxie[x+i]=0;
}
}
}
int main()
{
scanf("%d",&n);
dfs(1);
printf("%d",cnt);
return 0;
}