I try to solve the problem of N queens solution and want to print all possible values in a list of lists.
For example if n = 4 (size of board 4*4), the result should be [[(0, 2), (1, 0), (2, 3), (3, 1)], [(0, 2), (1, 0), (2, 3), (3, 1)]]
You can see my code below, and my question is: at the line where I remove the invalid position: self.remove_queen(row, col), the item in 'res' variable also be removing. How can I solve this problem? Thanks
Here is my Code:
class Solution:
def __init__(self):
self.queens_pos = []
self.res = []
def is_not_under_attack(self, row, col):
if not self.queens_pos:
return True
for queen_pos in self.queens_pos:
if (queen_pos[0] == row) or (queen_pos[1] == col) or (queen_pos[0] + queen_pos[1] == row + col) or (queen_pos[0] - queen_pos[1] == row - col):
return False
return True
def place_queen(self, row, col):
self.queens_pos.append((row, col))
def remove_queen(self, row, col):
self.queens_pos.pop(row)
def backtrack_queen(self, n, row=0, res = []):
for col in range(n):
if self.is_not_under_attack(row, col):
self.place_queen(row, col)
if row + 1 == n:
res.append(self.queens_pos)
print(res)
else:
res = self.backtrack_queen(n, row + 1, res)
self.remove_queen(row, col)
return res
my_solution = Solution()
count = my_solution.backtrack_queen(4)
print(count)