The N Queen is the problem of placing N chess queens on an N×N chessboard so that no two queens attack each other. For example, the following is a solution for 4 Queen problem.
The expected output is a binary matrix that has 1s for the blocks where queens are placed. For example, the following is the output matrix for above 4 queen solution.
{ 0, 1, 0, 0} { 0, 0, 0, 1} { 1, 0, 0, 0} { 0, 0, 1, 0}
Python3
# Python program to solve N Queen # Problem using backtracking global N
N = 4
def printSolution(board):
for i in range (N):
for j in range (N):
print (board[i][j],end = ' ' )
print ()
# A utility function to check if a queen can # be placed on board[row][col]. Note that this # function is called when "col" queens are # already placed in columns from 0 to col -1. # So we need to check only left side for # attacking queens def isSafe(board, row, col):
# Check this row on left side
for i in range (col):
if board[row][i] = = 1 :
return False
# Check upper diagonal on left side
for i, j in zip ( range (row, - 1 , - 1 ), range (col, - 1 , - 1 )):
if board[i][j] = = 1 :
return False
# Check lower diagonal on left side
for i, j in zip ( range (row, N, 1 ), range (col, - 1 , - 1 )):
if board[i][j] = = 1 :
return False
return True
def solveNQUtil(board, col):
# base case: If all queens are placed
# then return true
if col > = N:
return True
# Consider this column and try placing
# this queen in all rows one by one
for i in range (N):
if isSafe(board, i, col):
# Place this queen in board[i][col]
board[i][col] = 1
# recur to place rest of the queens
if solveNQUtil(board, col + 1 ) = = True :
return True
# If placing queen in board[i][col
# doesn't lead to a solution, then
# queen from board[i][col]
board[i][col] = 0
# if the queen can not be placed in any row in
# this column col then return false
return False
# This function solves the N Queen problem using # Backtracking. It mainly uses solveNQUtil() to # solve the problem. It returns false if queens # cannot be placed, otherwise return true and # placement of queens in the form of 1s. # note that there may be more than one # solutions, this function prints one of the # feasible solutions. def solveNQ():
board = [ [ 0 , 0 , 0 , 0 ],
[ 0 , 0 , 0 , 0 ],
[ 0 , 0 , 0 , 0 ],
[ 0 , 0 , 0 , 0 ]
]
if solveNQUtil(board, 0 ) = = False :
print ( "Solution does not exist" )
return False
printSolution(board)
return True
# driver program to test above function solveNQ() # This code is contributed by Divyanshu Mehta |
Output:
0 0 1 0 1 0 0 0 0 0 0 1 0 1 0 0
Time Complexity: O(N2)
Auxiliary Space: O(N)
Please refer complete article on N Queen Problem | Backtracking-3 for more details!
Article Tags :