题目地址
http://bailian.openjudge.cn/practice/2754
这个题用的是深搜 ,回溯法的应用。注意判断对角线之前是否存在皇后的方法。
#include<stdio.h>
#include<string.h>
#include<stdbool.h>
int i,j,n,m,num,a[10],b[100][10];
bool f[3][50];
int pre()
{
memset(f,1,sizeof(f));
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
num=0;
return 0;
}
void dfs(int x)
{
int i;
if(x==9)
{
num++;
for(i=1;i<=8;i++)
b[num][i]=a[i];
}
for(i=1;i<=8;i++)
if (f[0][i]&&f[1][x+i]&&f[2][x-i+8])
{
a[x]=i;
f[0][i]=f[1][x+i]=f[2][x-i+8]=0;
dfs(x+1);
f[0][i]=f[1][x+i]=f[2][x-i+8]=1;
}
}
int main()
{
int cas,i;
scanf("%d",&cas);
pre();
dfs(1);
while(cas--)
{
scanf("%d",&n);
for(i=1;i<=8;i++)
printf("%d",b[n][i]);
printf("\n");
}
return 0;
}