【算法分析】回溯法解八皇后问题(n皇后问题)
回溯法解题思路: (1)针对所给问题,定义问题的解空间; (2)确定易于搜索的解空间结构; (3)以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。 八皇后问题: 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 图解回溯法解八皇后问题: 回溯法解N皇后问题 1 、使用一个一维数组表示皇后的位置, 其中数组的下标表示皇后所在的行, 数组元素的值表示皇后所在的列。 2 、假设前n- 1 行的皇后已经按照规则排列好, 那么可以使用回溯法逐个试出第n行皇后的合法位置, 所有皇后的初始位置都是第 0 列, 那么逐个尝试就是从 0 试到 N - 1 , 如果达到 N ,仍未找到合法位置, 那么就置当前行的皇后的位置为初始位置 0 , 然后回退一行,且该行的皇后的位置加 1 ,继续尝试, 如果目前处于第 0 行,还要再回退,说明此问题已再无解。 3 、如果当前行的皇后的位置还是在 0 到 N - 1 的合法范围内, 那么首先要判断该行的皇后是否与前几行的皇后互相冲突, 如果冲突,该行的皇后的位置加 1 ,继续尝试, 如果不冲突,判断下一行的皇后, 如果已经是最后一行,说明已经找到一个解