-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathqueens.py
32 lines (31 loc) · 1.25 KB
/
queens.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class Solution(object):
def solveNQueens(self, n):
# i is column index
# left: left diagonal: \ level-i
# right: right diagonal: / level+i
self.col = [0]*n # not occupied column
self.left = [0]*(2*n-1) # number of left diagonal
self.right = [0]*(2*n-1)
board = [['.' for x in range(n)] for y in range(n)]
self.result = []
self.backTrack(n, 0, board)
return self.result
def backTrack(self, n, level, board):
if level == n: # finish
res = []
for i in range(n):
res.append(''.join(board[i]))
self.result.append(res)
return
for i in range(n): # iterate every column
# if col, left, right are all not accupied, put a queue here
if not self.col[i] and not self.left[level-i] and not self.right[level+i]:
board[level][i] = 'Q'
self.col[i] = 1
self.left[level-i] = 1
self.right[level+i] = 1 # choose
self.backTrack(n, level+1, board) # explore
board[level][i] = '.' # un choose
self.col[i] = 0
self.left[level-i] = 0
self.right[level+i] = 0