def is_safe(board, row, col, n):
# Check if there is 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_util(board, row, n):
if row == n:
# All queens are placed successfully
return [row[:] for row in board]
result = []
for col in range(n):
if is_safe(board, row, col, n):
board[row][col] = 1
# Recur for the next row
solutions = solve_n_queens_util(board, row + 1, n)
if solutions:
result.extend(solutions)
board[row][col] = 0 # Backtrack
return result
def solve_n_queens(n):
board = [[0] * n for _ in range(n)]
return solve_n_queens_util(board, 0, n)
# Example usage:
n = 8
solutions = solve_n_queens(n)
for solution in solutions:
print(solution)