Added code for n-queen problem (practical-5).
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
# Practical-A5 (N-Queen)
|
||||
|
||||
"""
|
||||
THIS CODE HAS BEEN TESTED AND IS FULLY OPERATIONAL.
|
||||
|
||||
Problem Statement: Design n-Queens matrix having first Queen placed. Use backtracking to place remaining Queens to generate the final n-queen‘s matrix.
|
||||
|
||||
Code from DesignAndAnalysisOfAlgorithms (SPPU - Final Year - Computer Engineering - Content) repository on KSKA Git: https://git.kska.io/sppu-be-comp-content/DesignAndAnalysisOfAlgorithms/
|
||||
"""
|
||||
|
||||
# BEGINNING OF CODE
|
||||
def placeQueens(i, cols, leftDiagonal, rightDiagonal, cur):
|
||||
n = len(cols)
|
||||
|
||||
if i == n:
|
||||
return True
|
||||
|
||||
for j in range(n):
|
||||
if cols[j] or rightDiagonal[i + j] or leftDiagonal[i - j + n - 1]:
|
||||
continue
|
||||
|
||||
cols[j] = 1
|
||||
rightDiagonal[i + j] = 1
|
||||
leftDiagonal[i - j + n - 1] = 1
|
||||
cur.append(j)
|
||||
|
||||
if placeQueens(i + 1, cols, leftDiagonal, rightDiagonal, cur):
|
||||
return True
|
||||
|
||||
cur.pop()
|
||||
cols[j] = 0
|
||||
rightDiagonal[i + j] = 0
|
||||
leftDiagonal[i - j + n - 1] = 0
|
||||
|
||||
return False
|
||||
|
||||
def nQueen(n):
|
||||
cols = [0] * n
|
||||
leftDiagonal = [0] * (n * 2)
|
||||
rightDiagonal = [0] * (n * 2)
|
||||
cur = []
|
||||
board = [['.' for _ in range(n)] for _ in range(n)]
|
||||
|
||||
if placeQueens(0, cols, leftDiagonal, rightDiagonal, cur):
|
||||
for i in range(n):
|
||||
board[i][cur[i]] = 'Q'
|
||||
return board
|
||||
else:
|
||||
return None
|
||||
|
||||
def printBoard(board):
|
||||
if board:
|
||||
for row in board:
|
||||
print(" ".join(row))
|
||||
else:
|
||||
print("No solution exists.")
|
||||
|
||||
n = int(input("Enter the number of queens:\t"))
|
||||
board = nQueen(n)
|
||||
printBoard(board)
|
||||
# END OF CODE
|
||||
Reference in New Issue
Block a user