问题描述
在一个n*n的棋盘上放置皇后,要求:一个皇后的同一行、同一列、同一条对角线上不允许出现其他皇后。请给出所有的放置方案。
算法思路
思路很简单,由于每行每列不能出现两个皇后,因此每行只能放一个皇后,那么第i行中皇后究竟应该放哪儿呢?我们可以从第i行第一列开始依次向后逐格判断,看看若放在当前位置是否会冲突,若不冲突,则继续考虑下一行,若冲突,则继续向后移动一格,再判断。
若i行所有的位置都不满足,则回溯,将i-1行皇后的位置往后移动,直到找到一个合理的位置,再继续从前往后寻找i行的位置。
示例
求解4皇后问题。
- 寻找第一行插入点:首先将Q放置a[0][0],无冲突;
- 寻找第二行插入点:a[1][0]、a[1][1]均冲突,a[1][2]可行;
寻找第三行插入点:发现所有格子都冲突,此时要发生回溯!