用栈解决N皇后问题(超详细注释、C/C++实现)
目的:
深入掌握栈应用的算法设计
内容:
编写一个程序,求解n皇后问题,即在n*n方格棋盘上放置n个皇后,要求每个皇后不同行、不同列、不同左右对角线
- 皇后个数n由用户输入,其值不能超过20,输出所有的解
- 采用类似于栈求解迷宫问题的方法
GitHub地址(包含.cpp文件和可执行程序exe)
源代码(经VS2015、devC++编译器运行通过)
#include "stdio.h"
#include "stdlib.h"
#include "io.h"
#include "math.h"
#include "time.h"
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 20 /* 存储空间初始分配量 */
typedef int Status;
typedef int SElemType; /* SElemType类型根据实际情况而定,这里假设为int */
/* 顺序栈结构 */
typedef struct
{
SElemType data[MAXSIZE];
int top; /* 用于栈顶指针 */
}SqStack;
int count = 0;
/*调用此方法用于检测是否符合N皇后规则*/
int placeQueen(SqStack s, int i, int j) {
//测试(i、j)是否与1->i-1皇后有冲突(i:行)
/*a为函数的返回值,0是否1是是*
*k为列数,默认为第一列
*/
int a