#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<vector>
#include<cstring>
using namespace std;
#define MAX 100
int tot,n;
int cur;
int vis[3][MAX]; //刚开始vis[2] 它C 也不报错,悲剧了就。。
int c[MAX]; //存储皇后位置
int search(int cur)
{
int i, j;
if(cur==n)
{
tot++;
for(i=0; i<n; i++)
printf("(%d,%d) ",i,c[i]);
printf("\n");
}
else
{
for(i=0; i<n; i++)
if(!vis[0][i] && !vis[1][cur+i]&& !vis[2][cur-i+n]) //当前列,对角线是否由皇后
{
c[cur]=i;
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)!=EOF)
{
tot = 0, cur = 0;
memset(vis, 0, sizeof(vis));
memset(c, 0, sizeof(c));
search(cur);
printf("%d\n",tot);
}
system("pause");
return 0;
}
皇后问题 回溯
最新推荐文章于 2022-06-11 15:59:30 发布