- 使用深度遍历
dfs
。 -
向左斜线
=>行下标与列下标差值相同
。向右斜线
=>行下标与列下标之和相同
。 -
n行n列
的网格,斜行有n*2-1
条。 - 一列只能放一个
Q
,一行只能放一个Q
。 - 用
col
、slash_left
、slash_right
三个集合,分别记录列
、左斜线上
、右斜线上
是否有Q。 - 综上,只需要遍历每一列,每次放
Q
时,对于每个位置判断其是否在三个集合中,如果三个集合都不包含当前位置,则当前位置是可以放Q
。 - 如果可以放
Q
,则记录列
、左斜线上
、右斜线上
相应下标为true
的有Q
状态,继续遍历下一行,如果可以遍历完所有行则获得一种解法。