您的当前位置:首页正文

c++利用栈解决八皇后问题

2024-07-28 来源:客趣旅游网
#include #include using namespace std; #define N 100 class Queen { public:

Queen(){num=-1;}

void Print(int n);//输出皇后的排列,打出的数字为每个皇后的坐标 int Check(int i,int k);//判断位置是否符合要求 void Queens(int k,int n);//递归调用 int count();//计数

private: int q[N]; int num; };

void main() { Queen Q;

int n;

cout<<\"请输入Queen的数目(n>0):\"<>n; if(n>0) { cout<<\"Queen可能的位置坐标:\"<Q.Queens(1,n);

cout<<\"共有 \"<} else

cout<<\"ERROR输入数字错误\"<}

void Queen::Queens(int k,int n)//计算出皇后的排列,k是当前皇后数量,n是数量上限 { 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 Queen::Check(int i,int k) { }

int Queen::count() { }

num++; return num; int j; j=1;

while(jif((q[j]==i) || abs(q[j]-i)==abs(j-k)) //判断列,判断斜线

return 0; //不符合返回0

int i,j;

for(i=1;i<=n;i++) {

cout<if(j==q[i]) cout<<\"Q \"; else cout<<\"* \";

}

}

cout<j++; }

return 1; //符合返回

因篇幅问题不能全部显示,请点此查看更多更全内容