ibeingnikhil-blog
ibeingnikhil-blog
Untitled
1 post
Don't wanna be here? Send us removal request.
ibeingnikhil-blog · 6 years ago
Text
N- Queen Problem
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
       return True
   #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()
           except IndexError:                break
           row=row-1            column=1+prev_column
       print("Number of Solutions: ",no_of_solutions)
n=int(input("Enter n: ")) solve_queen(n)
1 note · View note