Guest User

Untitled

a guest
Aug 17th, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.28 KB | None | 0 0
  1. def n_queens(N, rows = None, arrangements = None):
  2. if rows is None:
  3. rows = N
  4.  
  5. if arrangements is None:
  6. arrangements = []
  7.  
  8. if rows == 0:
  9. return arrangements
  10.  
  11. if rows == N:
  12. arrangements = [[]]
  13.  
  14. new_arrangements = []
  15. for col in range(N):
  16. cell = N - rows, col
  17. # if `arrangements` is empty, then this list comprehension is also empty.
  18. # that's a problem for starting out the list of possible arrangements.
  19. # We therefore do a hack in L12 in order to populate the first row of
  20. # the board
  21. new_arrangements += [[cell] + arrangement for arrangement in arrangements
  22. if no_conflict(cell, arrangement)]
  23.  
  24. return n_queens(N, rows - 1, new_arrangements)
  25.  
  26.  
  27. def no_conflict(cell, arrangement):
  28. for position in arrangement:
  29. if position[0] == cell[0] or position[1] == cell[1]:
  30. return False
  31. if abs(position[0] - cell[0]) == abs(position[1] - cell[1]):
  32. return False
  33. return True
  34.  
  35. if __name__ == '__main__':
  36. print(n_queens(0))
  37. print(n_queens(1))
  38. print(n_queens(2))
  39. print(n_queens(3))
  40. print(n_queens(4))
  41. print(len(n_queens(8)))
  42.  
  43. for i in range(10):
  44. assert(all(len(arrangement) == i for arrangement in n_queens(i)))
Add Comment
Please, Sign In to add comment