diff --git a/Codes/Assignment-B4.py b/Codes/Assignment-B4.py new file mode 100644 index 0000000..bd1f024 --- /dev/null +++ b/Codes/Assignment-B4.py @@ -0,0 +1,50 @@ +def placeQueens(i, cols, leftDiagonal, rightDiagonal, cur, board): + 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, board): + 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, board): + 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.") + +if __name__ == "__main__": + n = int(input("Enter the number of queens:\t")) + board = nQueen(n) + printBoard(board) diff --git a/README.md b/README.md index 0febf28..ae4c6de 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,7 @@ 1. [Assignment-A1 (DFS | BFS)](Codes/Assignment-A1.py) 2. [Assignment-A2 (A star algorithm)]() 3. [Assignment-A3.I (Selection Sort)](Codes/Assignment-A3.I.py) +4. [Assignment-A4 (N-Queen Problem)](Codes/Assignment-A4.py) ### Practical