LeetCode题目,51. N-Queens
先看题目描述
n 皇后问题研究的是如何将 n 个皇后放在一个 n × n 的棋盘上,并且使皇后不能彼此之间相互攻击,皇后的攻击方式是可以走直线攻击,也可以走对角线斜着攻击。题目要求是给定一个 n 代表皇后数量,让我们返回所有不同的 n 皇后问题的解决方案
算法和思路
回溯搜索算法(深度优先遍历).
思路就是尝试一行行的摆皇后位置,由于要保证皇后不能同时出现在 同一主对角线方向 或者 同一副对角线方向 或者同一列上,我们要为每一列,主对角线和副对角线设置相应的布尔数组变量,只要排定了某个皇后的位置,就要将其位置那列,主对角线和副对角线对应的布尔变量设置为 true,表示占住了对应的位置;当排定了某一行的皇后时,就去排下一行的皇后,只要「检测」到新摆放的「皇后」与已经摆放好的「皇后」冲突,就尝试摆放同一行的下一个位置,到行尾还不能放置皇后,就执行回溯操作
算法源码
1 | import java.util.*; |