N后问题要求在一个n*n格的棋盘上放置n个皇后,使得他们彼此不受攻击。按照国际象棋的规则,一个皇后可以攻击与之处在同一行或同一列或同一斜线上的其他任何棋子。因此,n后问题等价于要求在一个n*n的棋盘上放置n个皇后,使得任何2个皇后不能被放在同一行或同一列或同一斜线上。
用回溯法解n后问题时,可以用一颗完全n叉树来表示其解空间。用可行性约束函数Place可剪去不满足行、列和斜线约束的子树。*
#include<iostream>
using namespace std;
class Queen
{
int n;//多少个皇后
int *x;//当前解
int sum;//总共有几种方法
bool Place(int k)//检查可行性
{
for(int i =