#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;
}