利用回溯思想,主要是皇后之间碰撞条件的检测,其他的就是基本的搜索了
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <string.h>
#include <algorithm>
#include <stdio.h>
using namespace std;
int n;
int num;
int a[13][13];
int c[13];
bool vis[3][30];
void search(int cur)
{
int i,j;
if(cur == n)
{
num++;
return;
}
else for(i=0; i<n; i++)
{
if(!vis[0][i] && !vis[1][cur+i] && !vis[2][cur-i+n])
{
vis[0][i] = vis[1][cur+i] = vis[2][cur-i+n] = true;
search(cur+1);
vis[0][i] = vis[1][cur+i] = vis[2][cur-i+n] = false;
}
}
}
int main()
{
while(scanf("%d", &n) != EOF)
{
num = 0;
memset(vis,false,sizeof(vis));
search(0);
printf("%d\n",num);
}
system("pause");
return 0;
}