美文网首页
递归之n皇后问题

递归之n皇后问题

作者: sure_风雨与晴 | 来源:发表于2019-04-09 22:12 被阅读0次

八皇后问题

是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
考虑到每行只能放置一个皇后,每列也只能放置一个皇后,那么如果把n列皇后所在的行号一次写出,那么就会是1~n的一个排列。
于是只需要枚举1~n的所有排列,查看每个排列是否合法即可。八皇后总共有n!个排列即40320此枚举。
又,一般来说,如果能在到达递归边界前的某层,由于一些事实导致已经不需要往任何一个子问题递归,就可以直接返回上一层。一般把此称为回溯法。

#include <cstdio>
#include <cmath>
#include <iostream>
using namespace std;

const int maxn = 20;
int n, P[maxn], hashTable[maxn] = {false};
int coun = 0;
void generateP(int index)
{
    if (index == n+1)
    {
        coun++;
        printf("%d", coun);
        return;
    }
    for (int x = 1; x <= n; x++)
    {
        if(hashTable[x] == false)
        {
            bool flag = true;
            for(int pre  = 1; pre < index; pre++)
            {
                if(abs(index - pre) == abs(x - P[pre]))
                {
                    flag = false;
                    break;
                }
            }
            if (flag)
            {
                P[index] = x;
                hashTable[x] = true;
                generateP(index + 1);
                hashTable[x] = false;
            }
        }
    }
}
int main()
{
    scanf("%d", &n);
    generateP(1);
    return 0;
}

相关文章

  • 递归之n皇后问题

    八皇后问题 是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在...

  • LeetCode-N Queens

    N皇后问题。经典回溯问题: 以下是递归及非递归的方法:

  • LeetCode 52. N皇后 II(N-Queens II)

    52. N皇后 II N皇后 IIn 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之...

  • LeetCode N皇后和数独的递归思路分析

    分析基于 LeetCode #51 N皇后 和 LeetCode #37 数独求解。 1. 寻找递归变量 N皇后问...

  • 2018-08-10

    回溯法之n后问题 问题描述 在n x n格的棋盘上放置彼此不受攻击的n个皇后。按照国际象棋的规则,皇后可以攻击与之...

  • N-皇后问题

    国际象棋中皇后可攻击其所在行、列以及对角线上的棋子。N-皇后问题是要在N行N列的棋盘上放置N个皇后,使得皇后必吃之...

  • 算法-递归回溯N皇后问题

    51. N 皇后[https://leetcode-cn.com/problems/n-queens/] 皇后的摆...

  • (26)Go递归求解n皇后问题

    继上一篇后续《(25)Go递归求解二维平面类问题1》https://www.jianshu.com/p/94f34...

  • 回溯之N皇后

    N皇后问题:在 n x n 的棋盘上放置 N 个皇后,使其不能相互攻击。 1. 问题分析 皇后相互攻击是指:在皇后...

  • Leetcode 51. N-Queens

    回溯法,非递归求 N 皇后问题所有解,Python 3 实现: 源代码已上传 Github,持续更新。 源代码已上...

网友评论

      本文标题:递归之n皇后问题

      本文链接:https://www.haomeiwen.com/subject/nzhwiqtx.html