Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2020
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.51 KB | None | 0 0
  1. from collections import deque
  2. import copy
  3.  
  4. def zeroLocation(puzzle):
  5. for i in range(len(puzzle)):
  6. for j in range(len(puzzle[0])):
  7. if puzzle[i][j] == 0:
  8. return (i,j)
  9.  
  10. def neighbors(puzzle):
  11. X, Y = len(puzzle), len(puzzle[0])
  12. neighbors = []
  13. x_zero, y_zero = zeroLocation(puzzle)
  14. # print('zero:',zeroLocation(puzzle))
  15. for x,y in [(0, 1), (0, -1), (1, 0), (-1, 0)]:
  16. x_new = x_zero + x
  17. y_new = y_zero + y
  18. if 0 <= x_new < X and 0 <= y_new < Y:
  19. # print(x_new, y_new)
  20. new_board = copy.deepcopy(puzzle)
  21. new_board[x_zero][y_zero], new_board[x_new][y_new] = new_board[x_new][y_new], new_board[x_zero][y_zero]
  22. neighbors.append(new_board)
  23. return neighbors
  24.  
  25. def slidingPuzzle(puzzle):
  26. queue = deque()
  27. queue.append((puzzle,[puzzle]))
  28.  
  29. seen = []
  30.  
  31. while queue:
  32. print(len(queue))
  33. current, path = queue.popleft()
  34. neighbs = neighbors(current)
  35. for p in path:
  36. if p in neighbs: neighbs.remove(p)
  37. for neighbor in neighbs:
  38. if neighbor not in seen:
  39. if neighbor == [[0,1,2],[3,4,5],[6,7,8]]:
  40. # print("FOUND",path + [neighbor])
  41. print("MOVES",len(path))
  42. exit()
  43. else:
  44. queue.append((neighbor, path+[neighbor]))
  45. for x in neighbs: seen.append(x)
  46.  
  47. slidingPuzzle([[1,2,0],[3,4,5],[6,7,8]])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement