def solve_n_queens(n): def is_safe(board, row, col): # Verificar la columna for i in range(row): if board[i][col] == 1: return False # Verificar la diagonal izquierda i, j = row, col while i >= 0 and j >= 0: if board[i][j] == 1: return False i -= 1 j -= 1 # Verificar la diagonal derecha i, j = row, col while i >= 0 and j < n: if board[i][j] == 1: return False i -= 1 j += 1 return True def solve(board, row): if row >= n: solution = [] for r in board: solution.append("".join(['Q' if x == 1 else '.' for x in r])) solutions.append(solution) return for col in range(n): if is_safe(board, row, col): board[row][col] = 1 solve(board, row + 1) board[row][col] = 0 solutions = [] board = [[0] * n for _ in range(n)] solve(board, 0) return solutions # Ejemplo de uso: n = 8 solutions = solve_n_queens(n) for sol in solutions: for row in sol: print(row) print() -
def solve_n_queens(n):
def is_safe(board, row, col):
# Verificar la columna
for i in range(row):
if board[i][col] == 1:
return False
# Verificar la diagonal izquierda
i, j = row, col
while i >= 0 and j >= 0:
if board[i][j] == 1:
return False
i -= 1
j -= 1
# Verificar la diagonal derecha
i, j = row, col
while i >= 0 and j < n:
if board[i][j] == 1:
return False
i -= 1
j += 1
return True
def solve(board, row):
if row >= n:
solution = []
for r in board:
solution.append("".join(['Q' if x == 1 else '.' for x in r]))
solutions.append(solution)
return
for col in range(n):
if is_safe(board, row, col):
board[row][col] = 1
solve(board, row + 1)
board[row][col] = 0
solutions = []
board = [[0] * n for _ in range(n)]
solve(board, 0)
return solutions
# Ejemplo de uso:
n = 8
solutions = solve_n_queens(n)
for sol in solutions:
for row in sol:
print(row)
print()
-
Step by step
Solved in 2 steps