Last active
June 20, 2021 19:47
-
-
Save damienstanton/7de65065bf584a43f96a to your computer and use it in GitHub Desktop.
A-Star Pseudocode
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function A*(start,goal) | |
closedset := the empty set // The set of nodes already evaluated. | |
openset := {start} // The set of tentative nodes to be evaluated, initially containing the start node | |
came_from := the empty map // The map of navigated nodes. | |
g_score[start] := 0 // Cost from start along best known path. | |
// Estimated total cost from start to goal through y. | |
f_score[start] := g_score[start] + heuristic_cost_estimate(start, goal) | |
while openset is not empty | |
current := the node in openset having the lowest f_score[] value | |
if current = goal | |
return reconstruct_path(came_from, goal) | |
remove current from openset | |
add current to closedset | |
for each neighbor in neighbor_nodes(current) | |
if neighbor in closedset | |
continue | |
tentative_g_score := g_score[current] + dist_between(current,neighbor) | |
if neighbor not in openset or tentative_g_score < g_score[neighbor] | |
came_from[neighbor] := current | |
g_score[neighbor] := tentative_g_score | |
f_score[neighbor] := g_score[neighbor] + heuristic_cost_estimate(neighbor, goal) | |
if neighbor not in openset | |
add neighbor to openset | |
return failure | |
function reconstruct_path(came_from,current) | |
total_path := [current] | |
while current in came_from: | |
current := came_from[current] | |
total_path.append(current) | |
return total_path |
I saw the same error on wikipedia...
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Just wondering, did you write after looking at the Wikipedia page? If so, am I crazy, or is the pseudocode they have on the page wrong? Mostly in that they don't have your
neighbor not in openset
clause when checking whether the neighbor should be added.