check cost validity before entering in pq
This commit is contained in:
parent
8fe19e4643
commit
e5d2beb9e0
@ -33,16 +33,14 @@ local distances = {}
|
||||
local n = { 1, 1, 0 }
|
||||
while n ~= nil and (distances[5*h] == nil or distances[5*h][5*w] == nil) do
|
||||
local r, c, d = unpack(n)
|
||||
if cost(r, c) < math.huge then
|
||||
local row = distances[r] or {}
|
||||
if d < (row[c] or math.huge) then
|
||||
row[c] = d
|
||||
distances[r] = row
|
||||
pq:add({ r-1, c, d + cost(r-1, c) })
|
||||
pq:add({ r, c-1, d + cost(r, c-1) })
|
||||
pq:add({ r+1, c, d + cost(r+1, c) })
|
||||
pq:add({ r, c+1, d + cost(r, c+1) })
|
||||
end
|
||||
local row = distances[r] or {}
|
||||
if d < (row[c] or math.huge) then
|
||||
row[c] = d
|
||||
distances[r] = row
|
||||
if cost(r-1, c) < math.huge then pq:add({ r-1, c, d + cost(r-1, c) }) end
|
||||
if cost(r, c-1) < math.huge then pq:add({ r, c-1, d + cost(r, c-1) }) end
|
||||
if cost(r+1, c) < math.huge then pq:add({ r+1, c, d + cost(r+1, c) }) end
|
||||
if cost(r, c+1) < math.huge then pq:add({ r, c+1, d + cost(r, c+1) }) end
|
||||
end
|
||||
n = pq:pop()
|
||||
end
|
||||
|
Loading…
Reference in New Issue
Block a user