问题描述:
在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
#include<iostream>
#include<string.h>
#include<algorithm>
#include<stdlib.h>
using namespace std;
int queen[8];
int col[8];
int num;
void check()
{
bool k=true;
for(int i=0;i<7;i++)
{
for(int j=i+1;j<8;j++)
{
if(abs(i-j)==abs(queen[i]-queen[j]))
return ;
}
}
if(k)
num++;
return ;
}
void dfs(int n)
{
if(n==8)
{
check();
return ;
}
for(int i=0;i<8;i++)
{
if(!col[i])
{
col[i]=1;
queen[n]=i;
dfs(n+1);
col[i]=0;
}
}
return ;
}
int main()
{
memset(col,0,sizeof(col));
memset(queen,-1,sizeof(queen));
for(int i=0;i<8;i++)
{
col[i]=1;
queen[0]=i;
dfs(1);
col[i]=0;
}
cout<<num<<endl;
return 0;
}