C 利用栈解决八皇后问题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

{ int i;
if(k>n)//如果达到里要求的数量输出皇后排列
{
count();
Print(n);
}
else //否则在适当的位置添加一个新皇后
{
for(i=1;i<=n;i++)
if(Check(i,k)) //判断该行中该位置放置'皇后'是否符合要求
{
q[k]=i;
//记录改行中该点的位置
Queens(k+1,n); //放置下一行的'皇后' } } } void Queen::Print(int n) { int i,j; for(i=1;i<=n;i++) { cout<<endl; for(j=1;j<=n;j++) { if(j==q[i])
cout<<"Q "; else
cout<<"* "; } } cout<<endl; } int Queen::Check(int i,int k) { int j; j=1; while(j<k) { if((q[j]==i) || abs(q[j]-i)==abs(j-k)) //判断列,判断斜线
Q.Queens(1,n);
cout<<"共有 "<<Q.count()<<" 种方法放置 Queen"<<endl;
}
else
cout<<"ERROR 输入数字错误"<<endl;
}
void Queen::Queens(int k,int n)//计算出皇后的排列,k 是当前皇后数量,n 是数量上限
#include<iostream>
#include<cmath>
using namespace std;
#define N 100
class Queen
{
public:
Queen(){num=-1;}
void Print(int n);//输出皇后的排列,打出的数字为每个皇后的坐标
int Check(int i,int k);//判断位置是否符合要求
return 0; //不符合返回 0 j++; } return 1; //符合返回 } int Queen::count() { num++; return num; }
void Queens(int k,int n);//递归调用
i百度文库t count();//计数
private:
int q[N];
int num;
};
void main()
{
Queen Q;
int n;
cout<<"请输入 Queen 的数目(n>0):"<<endl;
cin>>n;
if(n>0)
{
cout<<"Queen 可能的位置坐标:"<<endl;
相关文档
最新文档