From 384603dc37bf5148810c89546807f7fb2686d26f Mon Sep 17 00:00:00 2001 From: Diptanshu bhawsar Date: Mon, 23 Oct 2023 17:31:15 +0530 Subject: [PATCH] feat: Implement N-Queens problem solution using backtracking --- n_queens.py | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 n_queens.py diff --git a/n_queens.py b/n_queens.py new file mode 100644 index 0000000..f4218e0 --- /dev/null +++ b/n_queens.py @@ -0,0 +1,46 @@ +def is_safe(board, row, col, N): + # Check if there's a queen in the same column + for i in range(row): + if board[i][col] == 1: + return False + + # Check upper-left diagonal + for i, j in zip(range(row, -1, -1), range(col, -1, -1)): + if board[i][j] == 1: + return False + + # Check upper-right diagonal + for i, j in zip(range(row, -1, -1), range(col, N)): + if board[i][j] == 1: + return False + + return True + +def solve_n_queens(N): + board = [[0 for _ in range(N)] for _ in range(N)] + if solve_util(board, 0, N) is False: + print("No solution exists") + else: + print_solution(board) + +def solve_util(board, row, N): + if row == N: + return True + + for col in range(N): + if is_safe(board, row, col, N): + board[row][col] = 1 + + if solve_util(board, row + 1, N): + return True + + board[row][col] = 0 # Backtrack + + return False + +def print_solution(board): + for row in board: + print(" ".join(["Q" if cell == 1 else "." for cell in row])) + +N = 8 # Change N to solve for different board sizes +solve_n_queens(N)