Advertisement
Guest User

Untitled

a guest
May 2nd, 2016
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.59 KB | None | 0 0
  1. #!/usr/bin/python
  2.  
  3. import gridgraph
  4. import priorityqueue
  5. import vector
  6.  
  7. def heuristic_distance(a, b):
  8. return vector.distance_between(a.value, b.value)
  9.  
  10. def distance(a, b):
  11. return 1
  12.  
  13. def astar(start, end, d, hd):
  14. visited = set()
  15.  
  16. dist = dict()
  17. dist[start] = 0
  18.  
  19. hdist = dict()
  20. hdist[start] = hd(start, end)
  21.  
  22. previous = dict()
  23. previous[start] = None
  24.  
  25. queue = priorityqueue.Min()
  26. queue.push(start, 0)
  27.  
  28. while queue.length > 0:
  29. n = queue.pop()
  30.  
  31. if n == end:
  32. #reconstruct the path
  33. path = []
  34. while n in previous:
  35. path.insert(0, n)
  36. n = previous[n]
  37. path.insert(0, start)
  38. return path
  39.  
  40. visited.add(n)
  41.  
  42. #dist to each child
  43. for neighbor in n.children:
  44. if neighbor in visited:
  45. continue
  46.  
  47. alt = dist[n] + d(n, neighbor)
  48. if neighbor not in dist or alt < dist[neighbor]:
  49. dist[neighbor] = alt
  50. previous[neighbor] = n
  51. #full distance calc:
  52. hdist[neighbor] = dist[neighbor] + hd(neighbor, end)
  53. queue.push(neighbor, hdist[neighbor])
  54.  
  55. #end not found
  56. return None
  57.  
  58.  
  59.  
  60.  
  61. def main():
  62. graph = gridgraph.GridGraph(20, 20)
  63. path = astar(graph.grid[0][0], graph.grid[19][19], distance, heuristic_distance)
  64.  
  65. graph.marked[path[0].value] = "S "
  66. for n in range(1, len(path)-1):
  67. graph.marked[path[n].value] = "O "
  68. graph.marked[path[-1].value] = "E "
  69.  
  70. print graph
  71.  
  72.  
  73. if __name__ == "__main__":
  74. main()
  75.  
  76.  
  77. OUTPUT:
  78. /usr/bin/python2.7 /home/jesse/Development/Python/goog/playground.py
  79. O - - - - - - - - - - - - - - - - - - -
  80. O O O - - - - - - - - - - - - - - - - -
  81. - - O O - - - - - - - - - - - - - - - -
  82. - - - O - - - - - - - - - - - - - - - -
  83. - - - O O O - - - - - - - - - - - - - -
  84. - - - - - O O - - - - - - - - - - - - -
  85. - - - - - - O O - - - - - - - - - - - -
  86. - - - - - - - O - - - - - - - - - - - -
  87. - - - - - - - O O O - - - - - - - - - -
  88. - - - - - - - - - O O - - - - - - - - -
  89. - - - - - - - - - - O - - - - - - - - -
  90. - - - - - - - - - - O O O - - - - - - -
  91. - - - - - - - - - - - - O - - - - - - -
  92. - - - - - - - - - - - - O O - - - - - -
  93. - - - - - - - - - - - - - O O - - - - -
  94. - - - - - - - - - - - - - - O O O - - -
  95. - - - - - - - - - - - - - - - - O - - -
  96. - - - - - - - - - - - - - - - - O O O -
  97. - - - - - - - - - - - - - - - - - - O O
  98. - - - - - - - - - - - - - - - - - - - E
  99.  
  100. Process finished with exit code 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement