fork download
  1. from typing import List
  2.  
  3. class Solution:
  4. def solveNQueens(self, n: int) -> List[List[str]]:
  5. """
  6. Solve the N-Queens problem:
  7. Place n queens on an n x n chessboard so that no two queens attack each other.
  8. Returns all possible board configurations.
  9. """
  10. results = []
  11. queens = [-1] * n # queens[row] = column index of queen in that row
  12. columns = [True] * n # track available columns
  13.  
  14. def is_diagonal_conflict(row: int, col: int) -> bool:
  15. """Check if placing a queen at (row, col) conflicts diagonally."""
  16. for prev_row in range(row):
  17. prev_col = queens[prev_row]
  18. if abs(row - prev_row) == abs(col - prev_col):
  19. return True
  20. return False
  21.  
  22. def backtrack(row: int) -> None:
  23. """Try to place queens row by row."""
  24. if row == n:
  25. # Construct a valid board representation
  26. board = []
  27. for r in range(n):
  28. row_str = ['.'] * n
  29. row_str[queens[r]] = 'Q'
  30. board.append("".join(row_str))
  31. results.append(board)
  32. return
  33.  
  34. for col in range(n):
  35. if columns[col] and not is_diagonal_conflict(row, col):
  36. # Place queen
  37. queens[row] = col
  38. columns[col] = False
  39.  
  40. # Recurse to next row
  41. backtrack(row + 1)
  42.  
  43. # Backtrack (remove queen)
  44. columns[col] = True
  45.  
  46. backtrack(0)
  47. return results
  48.  
Success #stdin #stdout 0.18s 16580KB
stdin
Standard input is empty
stdout
Standard output is empty