fork(2) download
  1. from collections import deque
  2.  
  3. M = N = 5
  4.  
  5. beg = """
  6. 00011
  7. 00001
  8. 10000
  9. 11000
  10. 10000
  11. """.split("\n")[1:-1]
  12.  
  13. grid = 0
  14.  
  15. pos = lambda x, y: N * x + y
  16.  
  17. for i in range(M):
  18. for j in range(N):
  19. if beg[i][j] == "1":
  20. grid ^= (1 << pos(i, j))
  21.  
  22. parent = {}
  23.  
  24. q = deque([(grid, -1, -1)])
  25.  
  26. v = {grid}
  27.  
  28. while len(q) > 0:
  29. curr, px, py = q.pop()
  30. if curr == 0:
  31. path = []
  32. while (curr, px, py) != (grid, -1, -1):
  33. path.append((px, py))
  34. curr, px, py = parent[(curr, px, py)]
  35. path.reverse()
  36. print(*path)
  37. exit(0)
  38. for i in range(M):
  39. for j in range(N):
  40. newcurr = curr
  41. for x, y in [(i, j), (i - 1, j), (i, j - 1), (i, j + 1), (i + 1, j)]:
  42. if 0 <= x < M and 0 <= y < N:
  43. newcurr ^= (1 << pos(x, y))
  44. if newcurr not in v:
  45. v.add(newcurr)
  46. parent[(newcurr, i, j)] = (curr, px, py)
  47. q.appendleft((newcurr, i, j))
Success #stdin #stdout 0.04s 10048KB
stdin
Standard input is empty
stdout
(0, 4) (3, 0)