#include
#include
#include
#include
#include
//定义常量
const int
MAXSIZE=100;
//第一全局变量
int
queen_count=0;
//记录皇后的个数
int
solut_count=0;
//记录求解个数
int
queen_position[MAXSIZE];
//记录皇后在各列上的位置
//输出所求解图形
void
output()
{
int row,col,n;
cout<<"第
"<<++solut_count<<"
种解法:";
for(row=0; row
cout<<" "<<queen_position[row];
cout<<"\n\n\t\t图示如下:
"<<endl;
for(row=0; row
{
for(col=0; col
{
n = queen_position[col];
if(row==n-1)
cout<<"☆"<<"
";
else
cout<<"■"<<"
";
}
cout<<endl;
}
cout<<"\n\t\t请按任意键继续。。。"<<endl;
getch();
system("cls");
}
//判断当前皇后所放位置正确与否
bool
judge_queen(int n)
{
for(int i=0; i
{
if(queen_position[i]==queen_position[n])
return
false;
//同列返回false
if(fabs(queen_position[n]-queen_position[i])==fabs(n-i))
//fabs()
return
false;
//同一对角线上返回false
}
return true;
}
//递归求解n皇后问题
void
queen(int
n)
//n表示放置第n个皇后
{
int row;
if(n==queen_count)
{
output();
return;
}
for(row=1;
row<=queen_count;row++)
//核心代码部分
{
queen_position[n]=row;
//试探第n行皇后的正确位置
if(judge_queen(n))
queen(n+1);
}
}
////////////////////////////////////////////////////////////////
int
main()
//主函数入口
{
cout<<"请输入皇后的个数:
";
cin>>queen_count;
queen(0);
//从0开始试探
cout<<queen_count<<"皇后问题解法共有:
"<<solut_count<<endl;
cout<<"\n\n\t\t请按任意键继续。。。"<<endl;
system("pause");
return 0;
}