【转】http://blog.csdn.net/zxy_snow/article/details/5949706
//八皇后
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <memory.h>
using namespace std;
const int n = 8;
int map[10][10],visit[10][10];
int num,Q;
int find(int x,int y)
{
int sum = 0;
for(int i=1; i<=n; i++) //判断对应的列是否已有皇后
{
sum += visit[i][y];
}
int b = y;
int a = x;
for(int i=1; i<=n; i++)
for(int k=1; k<=n; k++)
{
if( abs( i-x ) == abs( k-y ))
sum += visit[i][k];
}
return sum == 0 ? 1 : 0 ;
}
void DFS(int d)
{
if( Q == 8 )
{
num++;
return;
}
for(int i=1; i<=n; i++)
{
if( !visit[d][i] && find(d,i) )
{
visit[d][i] = 1;
Q++;
DFS( d+1 );
visit[d][i] = 0;
Q--;
}
}
}
int main()
{
num = 0; Q = 0;
memset(map,0,sizeof(map));
memset(visit,0,sizeof(visit));
DFS(1);
cout << num << endl;
system("pause");
return 0;
}