diff --git a/Codes/Code-A5.py b/Codes/Code-A5.py new file mode 100644 index 0000000..bd1f556 --- /dev/null +++ b/Codes/Code-A5.py @@ -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