题目如图所示:
#include<iostream>
#include<cmath>
#define N 8
using namespace std;
static int position[N];
static int chessboard[N][N];
void out_put_01()
{
int i;
cout<<"{ ";
for(i=0; i<N; ++i)
{
if(i == N-1)
cout<<(position[i]+1);
else
cout<<(position[i]+1)<<", ";
}
cout<<" }"<<endl;
}
void eigth_queen(int n)
{
int i, j, flag;
//当position[N]都放满了,说明找到八皇后的解
if(n==N)
{
//只输出第一行第一列有皇后的解
if(position[0] == 0)
out_put_01();
return;
}
for(i=0; i<N; ++i)
{
//position[n]存放的是第n行的第i个位置,即在第n行i列放置皇后
position[n]=i;
flag=1;
for(j=0; j<n; ++j)
{
//第n行与前j行是否同列或正反斜线上
if(position[n]==position[j] || abs(position[n]-position[j]) == (n-j))
flag=0;
}
//若这一行(即第n行没有冲突),则递归向下一行寻找皇后要放置的位置
if(flag)
eigth_queen(n+1);
}
}
int main()
{
eigth_queen(0);
return 0;
}
运行结果: