-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathastar.py
More file actions
executable file
·31 lines (23 loc) · 966 Bytes
/
Copy pathastar.py
File metadata and controls
executable file
·31 lines (23 loc) · 966 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import heapq
from myfunc import heuristic
from myfunc import get_next_positions
def search_astar(maze, start, goal):
passed_list = [start]
init_score = heuristic(start, goal)
closed_node = {start: init_score}
open_node = []
heapq.heappush(open_node, (init_score, passed_list))
while len(open_node) > 0:
score, passed_list = heapq.heappop(open_node)
last_passed_pos = passed_list[-1]
if last_passed_pos == goal:
return passed_list, closed_node
for pos in get_next_positions(last_passed_pos, maze):
new_passed_list = passed_list + [pos]
prev_cost = score - heuristic(last_passed_pos, goal)
pos_score = heuristic(pos, goal) + prev_cost + 1
if pos in closed_node and closed_node[pos] <= pos_score:
continue
closed_node[pos] = pos_score
heapq.heappush(open_node, (pos_score, new_passed_list))
return []