/*n皇后问题*/
#include <iostream>
#include<algorithm>
#include<queue>
#include<stack>
#include<cmath>
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
#define maxn 1000
int n,tot,col[maxn],vis[3][maxn];
void search(int cur)
{
int i,j;
if(cur==n)
{
tot++;
printf("----解%d:----\n",tot);
for(i=0; i<n; i++)
{
printf("x = %d y = %d\n",i,col[i]);
}
printf("\n");
}//递归边界。只要走到这所以皇后必然不冲突
else for(i=0; i<n; i++)
{
//优化前:
/*int ok=1;
col[cur]=i;//尝试把第cur行的皇后放在第i列
for(j=0; j<cur; j++)//检查是否和前面的皇后冲突
if(col[cur]==col[j]||cur-col[cur]==j-col[j]||cur+col[cur]==j+col[j])
{
ok=0;
break;
}
if(ok)
search(cur+1);//如果合法,则继续递归*/
//优化后:(回溯法)
if(!vis[0][i]&&!vis[1][cur+i]&&!vis[2][cur-i+n])
//利用二位数组直接判断
{
col[cur]=i;//如果不打印解,整个col数组都可以省略
vis[0][i]=vis[1][cur+i]=vis[2][cur-i+n]=1;//修改全局变量
search(cur+1);
vis[0][i]=vis[1][cur+i]=vis[2][cur-i+n]=0;//切记一定要改回来
}
}
}
int main()
{
while(scanf("%d",&n)==1)
{
tot=0;
memset(vis,0,sizeof(vis));
search(0);
printf("共有解 %d 个\n",tot);
}
return 0;
}
/*
4
----解1:----
x = 0 y = 1
x = 1 y = 3
x = 2 y = 0
x = 3 y = 2
----解2:----
x = 0 y = 2
x = 1 y = 0
x = 2 y = 3
x = 3 y = 1
共有解 2 个
8
---省略----
.
.
.
----解64:----
x = 0 y = 4
x = 1 y = 7
x = 2 y = 3
x = 3 y = 0
x = 4 y = 6
x = 5 y = 1
x = 6 y = 5
x = 7 y = 2
----解65:----
x = 0 y = 5
x = 1 y = 0
x = 2 y = 4
x = 3 y = 1
x = 4 y = 7
x = 5 y = 2
x = 6 y = 6
x = 7 y = 3
----解66:----
x = 0 y = 5
x = 1 y = 1
x = 2 y = 6
x = 3 y = 0
x = 4 y = 2
x = 5 y = 4
x = 6 y = 7
x = 7 y = 3
----解67:----
x = 0 y = 5
x = 1 y = 1
x = 2 y = 6
x = 3 y = 0
x = 4 y = 3
x = 5 y = 7
x = 6 y = 4
x = 7 y = 2
----解68:----
x = 0 y = 5
x = 1 y = 2
x = 2 y = 0
x = 3 y = 6
x = 4 y = 4
x = 5 y = 7
x = 6 y = 1
x = 7 y = 3
----解69:----
x = 0 y = 5
x = 1 y = 2
x = 2 y = 0
x = 3 y = 7
x = 4 y = 3
x = 5 y = 1
x = 6 y = 6
x = 7 y = 4
----解70:----
x = 0 y = 5
x = 1 y = 2
x = 2 y = 0
x = 3 y = 7
x = 4 y = 4
x = 5 y = 1
x = 6 y = 3
x = 7 y = 6
----解71:----
x = 0 y = 5
x = 1 y = 2
x = 2 y = 4
x = 3 y = 6
x = 4 y = 0
x = 5 y = 3
x = 6 y = 1
x = 7 y = 7
----解72:----
x = 0 y = 5
x = 1 y = 2
x = 2 y = 4
x = 3 y = 7
x = 4 y = 0
x = 5 y = 3
x = 6 y = 1
x = 7 y = 6
----解73:----
x = 0 y = 5
x = 1 y = 2
x = 2 y = 6
x = 3 y = 1
x = 4 y = 3
x = 5 y = 7
x = 6 y = 0
x = 7 y = 4
----解74:----
x = 0 y = 5
x = 1 y = 2
x = 2 y = 6
x = 3 y = 1
x = 4 y = 7
x = 5 y = 4
x = 6 y = 0
x = 7 y = 3
----解75:----
x = 0 y = 5
x = 1 y = 2
x = 2 y = 6
x = 3 y = 3
x = 4 y = 0
x = 5 y = 7
x = 6 y = 1
x = 7 y = 4
----解76:----
x = 0 y = 5
x = 1 y = 3
x = 2 y = 0
x = 3 y = 4
x = 4 y = 7
x = 5 y = 1
x = 6 y = 6
x = 7 y = 2
----解77:----
x = 0 y = 5
x = 1 y = 3
x = 2 y = 1
x = 3 y = 7
x = 4 y = 4
x = 5 y = 6
x = 6 y = 0
x = 7 y = 2
----解78:----
x = 0 y = 5
x = 1 y = 3
x = 2 y = 6
x = 3 y = 0
x = 4 y = 2
x = 5 y = 4
x = 6 y = 1
x = 7 y = 7
----解79:----
x = 0 y = 5
x = 1 y = 3
x = 2 y = 6
x = 3 y = 0
x = 4 y = 7
x = 5 y = 1
x = 6 y = 4
x = 7 y = 2
----解80:----
x = 0 y = 5
x = 1 y = 7
x = 2 y = 1
x = 3 y = 3
x = 4 y = 0
x = 5 y = 6
x = 6 y = 4
x = 7 y = 2
----解81:----
x = 0 y = 6
x = 1 y = 0
x = 2 y = 2
x = 3 y = 7
x = 4 y = 5
x = 5 y = 3
x = 6 y = 1
x = 7 y = 4
----解82:----
x = 0 y = 6
x = 1 y = 1
x = 2 y = 3
x = 3 y = 0
x = 4 y = 7
x = 5 y = 4
x = 6 y = 2
x = 7 y = 5
----解83:----
x = 0 y = 6
x = 1 y = 1
x = 2 y = 5
x = 3 y = 2
x = 4 y = 0
x = 5 y = 3
x = 6 y = 7
x = 7 y = 4
----解84:----
x = 0 y = 6
x = 1 y = 2
x = 2 y = 0
x = 3 y = 5
x = 4 y = 7
x = 5 y = 4
x = 6 y = 1
x = 7 y = 3
----解85:----
x = 0 y = 6
x = 1 y = 2
x = 2 y = 7
x = 3 y = 1
x = 4 y = 4
x = 5 y = 0
x = 6 y = 5
x = 7 y = 3
----解86:----
x = 0 y = 6
x = 1 y = 3
x = 2 y = 1
x = 3 y = 4
x = 4 y = 7
x = 5 y = 0
x = 6 y = 2
x = 7 y = 5
----解87:----
x = 0 y = 6
x = 1 y = 3
x = 2 y = 1
x = 3 y = 7
x = 4 y = 5
x = 5 y = 0
x = 6 y = 2
x = 7 y = 4
----解88:----
x = 0 y = 6
x = 1 y = 4
x = 2 y = 2
x = 3 y = 0
x = 4 y = 5
x = 5 y = 7
x = 6 y = 1
x = 7 y = 3
----解89:----
x = 0 y = 7
x = 1 y = 1
x = 2 y = 3
x = 3 y = 0
x = 4 y = 6
x = 5 y = 4
x = 6 y = 2
x = 7 y = 5
----解90:----
x = 0 y = 7
x = 1 y = 1
x = 2 y = 4
x = 3 y = 2
x = 4 y = 0
x = 5 y = 6
x = 6 y = 3
x = 7 y = 5
----解91:----
x = 0 y = 7
x = 1 y = 2
x = 2 y = 0
x = 3 y = 5
x = 4 y = 1
x = 5 y = 4
x = 6 y = 6
x = 7 y = 3
----解92:----
x = 0 y = 7
x = 1 y = 3
x = 2 y = 0
x = 3 y = 2
x = 4 y = 5
x = 5 y = 1
x = 6 y = 6
x = 7 y = 4
共有解 92 个
x = 1 y = 7
x = 2 y = 3
x = 3 y = 0
x = 4 y = 2
x = 5 y = 5
x = 6 y = 1
x = 7 y = 6
----解64:----
x = 0 y = 4
x = 1 y = 7
x = 2 y = 3
x = 3 y = 0
x = 4 y = 6
x = 5 y = 1
x = 6 y = 5
x = 7 y = 2
----解65:----
x = 0 y = 5
x = 1 y = 0
x = 2 y = 4
x = 3 y = 1
x = 4 y = 7
x = 5 y = 2
x = 6 y = 6
x = 7 y = 3
----解66:----
x = 0 y = 5
x = 1 y = 1
x = 2 y = 6
x = 3 y = 0
x = 4 y = 2
x = 5 y = 4
x = 6 y = 7
x = 7 y = 3
----解67:----
x = 0 y = 5
x = 1 y = 1
x = 2 y = 6
x = 3 y = 0
x = 4 y = 3
x = 5 y = 7
x = 6 y = 4
x = 7 y = 2
----解68:----
x = 0 y = 5
x = 1 y = 2
x = 2 y = 0
x = 3 y = 6
x = 4 y = 4
x = 5 y = 7
x = 6 y = 1
x = 7 y = 3
----解69:----
x = 0 y = 5
x = 1 y = 2
x = 2 y = 0
x = 3 y = 7
x = 4 y = 3
x = 5 y = 1
x = 6 y = 6
x = 7 y = 4
----解70:----
x = 0 y = 5
x = 1 y = 2
x = 2 y = 0
x = 3 y = 7
x = 4 y = 4
x = 5 y = 1
x = 6 y = 3
x = 7 y = 6
----解71:----
x = 0 y = 5
x = 1 y = 2
x = 2 y = 4
x = 3 y = 6
x = 4 y = 0
x = 5 y = 3
x = 6 y = 1
x = 7 y = 7
----解72:----
x = 0 y = 5
x = 1 y = 2
x = 2 y = 4
x = 3 y = 7
x = 4 y = 0
x = 5 y = 3
x = 6 y = 1
x = 7 y = 6
----解73:----
x = 0 y = 5
x = 1 y = 2
x = 2 y = 6
x = 3 y = 1
x = 4 y = 3
x = 5 y = 7
x = 6 y = 0
x = 7 y = 4
----解74:----
x = 0 y = 5
x = 1 y = 2
x = 2 y = 6
x = 3 y = 1
x = 4 y = 7
x = 5 y = 4
x = 6 y = 0
x = 7 y = 3
----解75:----
x = 0 y = 5
x = 1 y = 2
x = 2 y = 6
x = 3 y = 3
x = 4 y = 0
x = 5 y = 7
x = 6 y = 1
x = 7 y = 4
----解76:----
x = 0 y = 5
x = 1 y = 3
x = 2 y = 0
x = 3 y = 4
x = 4 y = 7
x = 5 y = 1
x = 6 y = 6
x = 7 y = 2
----解77:----
x = 0 y = 5
x = 1 y = 3
x = 2 y = 1
x = 3 y = 7
x = 4 y = 4
x = 5 y = 6
x = 6 y = 0
x = 7 y = 2
----解78:----
x = 0 y = 5
x = 1 y = 3
x = 2 y = 6
x = 3 y = 0
x = 4 y = 2
x = 5 y = 4
x = 6 y = 1
x = 7 y = 7
----解79:----
x = 0 y = 5
x = 1 y = 3
x = 2 y = 6
x = 3 y = 0
x = 4 y = 7
x = 5 y = 1
x = 6 y = 4
x = 7 y = 2
----解80:----
x = 0 y = 5
x = 1 y = 7
x = 2 y = 1
x = 3 y = 3
x = 4 y = 0
x = 5 y = 6
x = 6 y = 4
x = 7 y = 2
----解81:----
x = 0 y = 6
x = 1 y = 0
x = 2 y = 2
x = 3 y = 7
x = 4 y = 5
x = 5 y = 3
x = 6 y = 1
x = 7 y = 4
----解82:----
x = 0 y = 6
x = 1 y = 1
x = 2 y = 3
x = 3 y = 0
x = 4 y = 7
x = 5 y = 4
x = 6 y = 2
x = 7 y = 5
----解83:----
x = 0 y = 6
x = 1 y = 1
x = 2 y = 5
x = 3 y = 2
x = 4 y = 0
x = 5 y = 3
x = 6 y = 7
x = 7 y = 4
----解84:----
x = 0 y = 6
x = 1 y = 2
x = 2 y = 0
x = 3 y = 5
x = 4 y = 7
x = 5 y = 4
x = 6 y = 1
x = 7 y = 3
----解85:----
x = 0 y = 6
x = 1 y = 2
x = 2 y = 7
x = 3 y = 1
x = 4 y = 4
x = 5 y = 0
x = 6 y = 5
x = 7 y = 3
----解86:----
x = 0 y = 6
x = 1 y = 3
x = 2 y = 1
x = 3 y = 4
x = 4 y = 7
x = 5 y = 0
x = 6 y = 2
x = 7 y = 5
----解87:----
x = 0 y = 6
x = 1 y = 3
x = 2 y = 1
x = 3 y = 7
x = 4 y = 5
x = 5 y = 0
x = 6 y = 2
x = 7 y = 4
----解88:----
x = 0 y = 6
x = 1 y = 4
x = 2 y = 2
x = 3 y = 0
x = 4 y = 5
x = 5 y = 7
x = 6 y = 1
x = 7 y = 3
----解89:----
x = 0 y = 7
x = 1 y = 1
x = 2 y = 3
x = 3 y = 0
x = 4 y = 6
x = 5 y = 4
x = 6 y = 2
x = 7 y = 5
----解90:----
x = 0 y = 7
x = 1 y = 1
x = 2 y = 4
x = 3 y = 2
x = 4 y = 0
x = 5 y = 6
x = 6 y = 3
x = 7 y = 5
----解91:----
x = 0 y = 7
x = 1 y = 2
x = 2 y = 0
x = 3 y = 5
x = 4 y = 1
x = 5 y = 4
x = 6 y = 6
x = 7 y = 3
----解92:----
x = 0 y = 7
x = 1 y = 3
x = 2 y = 0
x = 3 y = 2
x = 4 y = 5
x = 5 y = 1
x = 6 y = 6
x = 7 y = 4
共有解 92 个
*/