美文网首页
N皇后算法基本原理(回溯法)

N皇后算法基本原理(回溯法)

作者: HUNYX | 来源:发表于2017-02-21 23:41 被阅读0次

     N皇后问题是一个经典的问题,在一个N*N的棋盘上放置N个皇后,每行一个并使其不能互相攻击(同一行、同一列、同一斜线上的皇后都会自动攻击)。


回溯算法也叫试探法,它是一种系统地搜索问题的解的方法。回溯算法的基本思想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。


      在现实中,有很多问题往往需要我们把其所有可能穷举出来,然后从中找出满足某种要求的可能或最优的情况,从而得到整个问题的解。回溯算法就是解决这种问题的“通用算法”,有“万能算法”之称。N皇后问题在N增大时就是这样一个解空间很大的问题,所以比较适合用这种方法求解。这也是N皇后问题的传统解法,很经典。

下面是算法的高级伪码描述,这里用一个N*N的矩阵来存储棋盘:

1) 算法开始, 清空棋盘,当前行设为第一行,当前列设为第一列

2) 在当前行,当前列的位置上判断是否满足条件(即保证经过这一点的行,列与斜线上都没有两个皇后),若不满足,跳到第4步

3) 在当前位置上满足条件的情形:

在当前位置放一个皇后,若当前行是最后一行,记录一个解;

若当前行不是最后一行,当前行设为下一行, 当前列设为当前行的第一个待测位置;

若当前行是最后一行,当前列不是最后一列,当前列设为下一列;

若当前行是最后一行,当前列是最后一列,回溯,即清空当前行及以下各行的棋盘,然后,当前行设为上一行,当前列设为当前行的下一个待测位置;

以上返回到第2步

4) 在当前位置上不满足条件的情形:

若当前列不是最后一列,当前列设为下一列,返回到第2步;

若当前列是最后一列了,回溯,即,若当前行已经是第一行了,算法退出,否则,清空当前行及以下各行的棋盘,然后,当前行设为上一行,当前列设为当前行的下一个待测位置,返回到第2步。

摘抄自网络 作者不详

相关文章

  • N皇后

    回溯法核心代码: n皇后问题回溯法

  • N皇后算法基本原理(回溯法)

    N皇后问题是一个经典的问题,在一个N*N的棋盘上放置N个皇后,每行一个并使其不能互相攻击(同一行、同一列、同一...

  • 51. N-Queens

    题目分析 N 皇后问题 + 回溯法 代码

  • 算法(11):回溯法

    今天补一下回溯法,别的不说,n皇后问题必须列出来才行~ 目录:算法:附录算法(1):递归算法(2):链表算法(3)...

  • LeetCode 51. N-Queens

    Leetcode : N-QueensDiffculty:Hard N皇后问题,对八皇后问题的扩展,典型的回溯法算...

  • 怎样应对IT面试与笔试-(八)

    Backtracking(回溯法) 51. N-Queens 经典的N皇后问题,将n个皇后放到n*n的棋盘上,使得...

  • n皇后(回溯法)

    在 n * n 的棋盘上放置n个皇后,使得每一行、每一列、每一条对角线有且只有一个皇后,实质上可以抽象为对 1 ~...

  • 回溯算法 - N皇后问题

    回溯算法 实际上就是一个决策树的遍历过程 路径:已经做出的选择 选择列表:是你当前可以做的选择 结束条件:到达决策...

  • 每日一题:n queues

    题目:在n阶棋盘上放n个皇后,皇后在横竖斜都不能重复。分析:这是一道典型的回溯算法算法:1>如果当前的格子是可以放...

  • 2018-08-10

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

网友评论

      本文标题:N皇后算法基本原理(回溯法)

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