4皇后

回溯法

六月ゝ 毕业季﹏ 提交于 2021-02-12 11:54:16
回溯算法也叫试探算法,是一种系统的搜素问题解的方法。回溯算法的基本思想:在节点出选择一条 路向前走,能进则进,不能进则退回上一个节点,选另一条路走。为了能应用回溯算法,所要求的解必须能表示成n元组(x1,x2,x3,x4,...xn),其中xi是取自某个有穷集Si。通常,所求解的问题要取一个使某一 规范函数 P(x1,x2,x3,x4.....xn)取极小值(或者极大值或满足该规范函数的所有向量)。 回溯算法的一般步骤: 1 针对所给问题,定义问题的解空间,它至少包含问题的一个(最优)解。 2 确定易于搜索的解空间结构,使得能用回溯法方便地搜索整个解空间 。 3 以DFS或BFS搜索解空间,并且在搜索过程中用剪枝函数避免无效搜索。 当生成问题状态空间树以后,就可以生成问题状态。然后找出问题状态中的那些是解状态,接着根据解状态确定那些解状态是答案状态。根据DFS深度优先搜索算法,从根节点开始扩展其他节点。如果一个已扩展节点而他的子节点还没有全部被扩展,则这个节点叫作 活节点 。当前正在扩展其儿子节点的节点叫作E节点(正在扩展节点)。不再进一步扩展或者其子节点已被扩展的节点叫做死节点。根据DFS搜索方法,如果遇到了一个死节点,就向上回溯到最近的一个活节点。然后让这个活节点变成E节点。如此一直递归的在状态空间树中搜索下去,直到找到一个解,或者没有活节点。 经典例题: (1) N皇后问题