//=============Program Description==================================//
//程序文件:queeen.cpp //
//程序名称:八皇后问题 //
//方 法:递归方法 //
//程序编写:(ExceedStudio)
//======================================================================//
#include<iostream.h>
char borad[8][8];
void printf()
{
int i,j;
for (i=0;i<8;i++)
{ for (j=0;j<8;j++)
cout<<borad[i][j];
cout<<endl;
}
}
void fill_up()
{
int i,j;
for (i=0;i<8;i++)
for (j=0;j<8;j++)
borad[i][j]='x';
}
int check(int x,int y)
{
int x1=x,y1=y;
int i;
for (i=0;i<8;i++)
if (borad[x][i]=='Q' || borad[i][y]=='Q')
return 0; //判断行OR列上是未有Q
while (x1<8 && y1<8)
{
if (borad[x1+1][y1+1]=='Q' )
return 0;
else {
x1++;
y1++;
}
}
x1=x;
y1=y;
while (x1>0 && y1>0)
{
if (borad[x1-1][y1-1]=='Q' )
return 0;
else {
x1--;
y1--;
}
}
x1=x;
y1=y;
while (x1>0 && y1<8)
{
if (borad[x1-1][y1+1]=='Q' )
return 0;
else {
x1--;
y1++;
}
}
x1=x;
y1=y;
while (x1<8 && y1>0)
{
if (borad[x1+1][y1-1]=='Q' )
return 0;
else {
x1++;
y1--;
}
}
return 1;
}
void place(int n)
{
int i;
for (i=0;i<8;i++) //控制每一行皇后的位置(列数)
{
if (check(n,i)) //以皇后数控制行数~~~~检测此行的每一列是否可以放上Q
{
borad[n][i]='Q';
if (n<7)
place(n+1); //当少于8个皇后时,则递归下一个!
else {
printf(); //否则输出结果
return;
}
borad[n][i]='x'; //当最外的for控制着列位置,当这个位置的Q,
//使得后面排不到8个,这时就要放Q于下一位
}
}
}
int main()
{
fill_up();
borad[0][0]='Q';
place(1);
return 0;
}