题目
思路
DFS,难点在斜线的判断。
1.当两个点在左上->右下的斜线时,
x1−y1==x2−y2
x
1
−
y
1
==
x
2
−
y
2
2.当两个点在右上->左下的斜线时,
x1+y1==x2+y2
x
1
+
y
1
==
x
2
+
y
2
代码
class Solution:
"""
@param: n: The number of queens
@return: All distinct solutions
"""
def __init__(self):
self.res_list = []
def draw_map(self, n, col_list):
tmp_list = []
for i in range(n):
tmp_str = ''
for j in range(n):
if j == col_list[i]: tmp_str += 'Q'
else: tmp_str += '.'
tmp_list.append(tmp_str)
return tmp_list
def canPlace(self, row, col_list, col):
for r, v in enumerate(col_list):
if row - col == r - v or row + col == r + v or col == v: return False
return True
def bfs(self, n, row, col_list):
if row == n:
self.res_list.append(self.draw_map(n, col_list))
return True
for col in range(n):
if self.canPlace(row, col_list, col):
col_list.append(col)
self.bfs(n, row + 1, col_list)
col_list.pop(-1)
def solveNQueens(self, n):
# write your code here
self.bfs(n, 0, [])
return self.res_list