回溯算法–python实现n皇后问题
文章目录
什么是回溯法?
回溯法有“通用的解题法”之称。用它可以系统地搜索一个问题的所有解或任一解。回溯法是一个既带有跳跃性的搜索算法。它在问题的解空间树中,按深度优先策略,从根结点出发搜索解空间树。算法搜索至解空间树的任一结点时,先判断该结点是否包含问题的解。如果肯定不包含,则跳过对以该结点为根的子树的搜索,逐层向其祖先结点回溯。否则,进入该子树,继续按深度优先策略搜索。回溯法求问题的所有解时,要回溯到根,且根结点的所有子树都已被搜索遍才结束。
-
回溯和递归是相辅相成的,回溯一般隐藏在递归函数的下面。
-
暴力法搜索
回溯法可以解决的问题?
组合问题 1234 12.13.14.23.24.34
切割问题 如何切割字串是回文子串
子集问题 1234 1.2.3.4.12.13.14.23.24.34.123.124 …
排列问题
棋盘问题 n皇后,解数组
n后问题——问题描述
问题描述:在n X n格的棋盘上放置彼此不受攻击的n个皇后。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n后问题等价于在n X n格的棋盘上放置n个皇后,任何2个皇后不放在同一行或同一列或同一斜线。
列出n后问题所有的解。
假设一个2皇后的问题,不考虑攻击的条件,会有4(n^n)种解法。