我们先来了解一下什么是n皇后问题:
在n×n格的棋盘上放置彼此不受攻击的n个皇后。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n后问题等价于在n×n格的棋盘上放置n个皇后,任何2个皇后不放在同一行或同一列或同一斜线上。
对于此问题,我们可以用回溯算法实现该问题求解
具体要求:棋盘大小n作为输入,输出结果使用一维向量表示,每个分量值表示皇后在该行所在列的位置,输出所有可行方案
笔者所选用的编译器为Codeblocks,其他编译器也大同小异,应该只需做小更改
//具体思路在代码部分有,就不再赘述了
首先是递归的方法来实现:
#include <iostream>
using namespace std;
int queen[10], sum=0; /* max为棋盘最大坐标 */
void show(int max) /* 输出所有皇后的坐标 */
{
int i;
//i代表行数,queen[i]代表当前行元素所处的列数,
//注意此处下标是从0开始的
for(i = 0; i < max; i++)
{