代码来源:DeathYmz
AC的C++语言程序如下:
#include<iostream>
#include<cstdio>
#include<cstring>
//很坑很坑的输出 !!!!!
using namespace std;
const int N=8;
int n,top;
int x,y;
int C[N],vis[3][2*N];
void search(int cur)//问题只要求八个 cur行i列
{
if(cur==8)
{
printf("%2d ",++top);
for(int i=0;i<8;i++)
printf(" %d",C[i]+1);
printf("\n");
return;
}
///走到这,所有皇后不冲突
if(cur==y) search(cur+1);
else
for(int i=0;i<8;i++)
{
if(!vis[0][i]&&!vis[1][cur+i]&&!vis[2][cur-i+8])//判断
{
C[cur]=i;
//cout<<"emmmm: "<<i<<endl;
vis[0][i]=vis[1][cur+i]=vis[2][cur-i+8]=1;
search(cur+1);
vis[0][i]=vis[1][cur+i]=vis[2][cur-i+8]=0;
}
}
}
int main()
{
scanf("%d",&n);
while(n--)
{
scanf("%d%d",&x,&y);
memset(vis,0,sizeof(vis));
memset(C,0,sizeof(C));
top=0;
x--,y--;
C[y]=x;//x,y是q有棋子
vis[0][x]=vis[1][x+y]=vis[2][y-x+8]=1;//原条件
printf("SOLN COLUMN\n");
printf(" # 1 2 3 4 5 6 7 8\n\n");
search(0);
if(n) printf("\n");
}
return 0;
}