class QueenChessBoard:
def __init__(self,size):
self.size=size
self.columns=[]
def place_in_next_row(self,column):
self.columns.append(column)
def remove_in_current_row(self):
return self.columns.pop()
def is_this_column_safe_in_next_row(self,column):
row=len(self.columns)
for q in self.columns:
if column == q:
return False
for qr,qc in enumerate(self.columns):
if qc-qr == column-row:
return False
for qr,qc in enumerate(self.columns):
if ((self.size-qc)-qr)==((self.size-column)-row):
return False
#Display the chessboard
def display(self):
for row in range(self.size):
for column in range(self.size):
if column == self.columns[row]:
print('Q',end=' ')
else:
print('.',end=' ')
print()
def solve_queen(size):
board = QueenChessBoard(size)
no_of_solutions=0
row=0
column=0
while True:
while column<size:
if board.is_this_column_safe_in_next_row(column):
board.place_in_next_row(column)
row=row+1
column=0
break
else:
column=column+1
if(column==size or row==size):
if row==size:
board.display()
print()
no_of_solutions+=1
board.remove_in_current_row()
row=row-1
try:
prev_column=board.remove_in_current_row()
row=row-1
column=1+prev_column
print("Number of Solutions: ",no_of_solutions)
n=int(input("Enter n: "))
solve_queen(n)