递归 八皇后

Posted kirarrr

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了递归 八皇后相关的知识,希望对你有一定的参考价值。

递归 八皇后


题意

> 棋子不能在同一行,同一列,以及同一对角线。
> 输出所有符合要求的情况。
  • 步骤:用计数器统计次数,按列写出全排列,再枚举任意两个棋子,如果不符合条件,则计数器不变。
#include <cstdio>
#include <algorithm>

const int maxn = 100;
int n, p[maxn], hashTable[maxn] = {false};

int count = 0;
void generateP(int index) {
    if (index == n + 1) {
        bool flag = true;
        for (int i = 1; i <= n; i++) {
            for (int j = i + 1; j <= n; j++) {
                if (abs(i - j) == abs(p[i] - p[j])) {
                    flag = false;
                }
            }
        }
        if (flag) count++;
        return;
    }
    for (int x = 1; x <= n; x++) {
        if (hashTable[x] == false) {
            p[index] = x;
            hashTable[x] = true;
            generateP(index + 1);
            hashTable[x] = false;
        }
    }
}

int main() {
    n = 8;
    generateP(1);
    printf("%d", count);
    return 0;
}

输出结果 92

以上是关于递归 八皇后的主要内容,如果未能解决你的问题,请参考以下文章

13,递归,八皇后问题

回溯法八皇后问题(递归和非递归)

Python用迭代(yield)和递归解决八皇后问题

算法——八皇后问题(递归回溯实现)

python关于八皇后判断冲突函数的一些逻辑小问题

DFS(递归)模板 ——八皇后和迷宫寻找出路