Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local function removeLowest(set, costs, h)
- return function(t, ...)
- local prospect, cost
- for node in pairs(t) do
- if not cost or costs[node] + h(node) < cost then
- prospect, cost = node, costs[node] + h(node)
- end
- end
- if prospect then
- local parent = t[prospect]
- t[prospect] = nil
- return prospect, parent
- end
- end, set
- end
- return function(start, goal, neighbors, h)
- local open = {[start] = false}
- local costs = {[start] = 0}
- local parents = {}
- for prospect, parent in removeLowest(open, costs, function(source) return h(source, goal) end) do
- if prospect == goal then
- return parent, costs[prospect], parents
- end
- for successor, cost in neighbors(prospect) do
- cost = cost + costs[prospect]
- if not costs[successor] or costs[successor] > cost then
- costs[successor] = cost
- open[successor] = prospect
- parents[successor] = prospect
- end
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement