What is N Queens Problem?
The N Queens problem is:
How can N queens be placed on an NxN chessboard so that no two of them attack each other?
The eight queens puzzle is the problem of placing eight chess queens on an n x n chessboard so that no two queens threaten each other.
Thus, a solution requires that no two queens share the same row, column, or diagonal. The eight queens puzzle is an example of the more general n queens problem of placing n non-attacking queens on an n×n chessboard, for which solutions exist for all natural numbers n with the exception of n=2 and n=3.
A possible solution for N Queens problem is:
Python program to implement N Queens problem:
def isSafe(board, row, col, n):
# check if there is a queen in the same row
for i in range(col):
if board[row][i] == 1:
return False
# check if there is a queen in the upper diagonal on the left side
for i, j in zip(range(row, -1, -1), range(col, -1, -1)):
if board[i][j] == 1:
return False
# check if there is a queen in the lower diagonal on the left side
for i, j in zip(range(row, n), range(col, -1, -1)):
if board[i][j] == 1:
return False
return True
def solveNQueenUtil(board, col, n):
# base case: all queens are placed
if col == n:
return True
# try placing a queen in each row in the current column
for i in range(n):
if isSafe(board, i, col, n):
board[i][col] = 1
# recursively place the rest of the queens
if solveNQueenUtil(board, col + 1, n):
return True
# backtrack and remove the queen from the current position
board[i][col] = 0
# no safe placement found in this column
return False
def solveNQueen(n):
# create a n x n chess board
board = [[0 for x in range(n)] for y in range(n)]
if solveNQueenUtil(board, 0, n) == False:
print("No solution exists.")
return False
# print the solution
for i in range(n):
for j in range(n):
print(board[i][j], end=' ')
print()
return True
To solve the n-queen problem, you can call the solveNQueen function with the desired value of n. For example, to solve the problem for n=4, you can call solveNQueen(4). The program will print the solution if one exists, otherwise it will print “No solution exists.”.
Let us know in comments in case of any suggestions.
Also check: N Queens problem using backtracking in C