问题描述:
•
在
n×n
格的国际象棋上摆放
n个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
算法思路:
•
思路很简单,由于每行每列不能出现两个皇后,因此每行只能放一个皇后,那么第
i
行中皇后究竟应该放哪儿呢?我们可以从第
i
行第一列开始依次向后逐格判断,看看若放在当前位置是否会冲突,若不冲突,则继续考虑下一行,若冲突,则继续向后移动一格,再判断。 若
i
行所有的位置都不满足,则回溯,将
i-1
行皇后的位置往后移动,直到找到一个合理的位置,再继续从前往后寻找
i
行的位置。
回溯法介绍:
•
按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法。
示例 --求解4皇后问题:
1.
寻找第一行插入点:首先将
Q
放置
a[0][0]
,无冲突;
2.
寻找第二行插入点:
a[1][0]
、
a[1][1]