//八皇后问题
#include<bits/stdc++.h>
using namespace std;
int r,c,C[10],ans;
bool done[3][30];
void dfs(int cur)
{
if(cur==9) {
ans++;
printf("%2d ",ans);
for(int i=1;i<=8;i++)
printf(" %d",C[i]);
printf("\n");
return;
}
if(cur==c) {
dfs(cur+1);
return;
}
for(int i=1;i<=8;i++) //枚举行
{
if(!done[0][i]&&!done[1][cur+i]&&!done[2][cur-i+8]) {
C[cur]=i;
done[0][i]=done[1][cur+i]=done[2][cur-i+8]=true;
dfs(cur+1);
done[0][i]=done[1][cur+i]=done[2][cur-i+8]=false;
}
}
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&r,&c);
ans=0;
memset(done,false,sizeof(done));
C[c]=r;
done[0][r]=done[1][r+c]=done[2][c-r+8]=true;
printf("SOLN COLUMN\n # 1 2 3 4 5 6 7 8\n\n");
dfs(1); //从第一列开始填数
if(T) printf("\n");
}
return 0;
}
uva 750 八皇后问题
最新推荐文章于 2020-08-29 10:13:53 发布