编写一个程序exp3-6.cpp,求解皇后问题:在nxn的方格棋盘上,放置n个皇后,要求每个皇后不同行、不同、不同左右对角线。
代码如下:
#include <iostream>
#include <stdlib.h>
using namespace std;
#define MaxSize 100
typedef struct
{
int cols[MaxSize]; //cols[i]存放第i+1个皇后的列号
int top; //栈顶指针
} SqStack; //定义顺序栈类型
int count=1; //记录解个数
bool place(SqStack *s,int i,int j) //测试(i,j)是否与1~i-1皇后有冲突
{
int k=0;
if (i==0) //放第一个皇后时不会冲突
return true;
while (k<i) //j=0到k-1是已放置了皇后的列
{
if ((s->cols[k]==j)
|| (abs(j-s->cols[k])==abs(k-i)))
return false;
k++;
}
return true;
}
void queen(int n)
{
SqStack *s; //定义栈
s=(SqStack *)malloc(sizeof(SqSt