У меня есть двумерная карта земли и воды, как и следующая (l
, представляющая землю и w
, представляющая воду).Нахождение кратчайшего расстояния до воды
lllwwwlll
lllwllllw
lllllllww
lllllllll
Для каждой земельной плитки я хочу знать ее расстояние от ближайшей водопроводной плитки. Двигаясь по горизонтали, по вертикали и по диагонали, все считаются расстоянием до одного.
321www111
321w1111w
3211121ww
322222111
Сейчас я использую алгоритм так:
foreach tile in map
if isWater(tile)
tile.distanceFromWater = 0
else
radius = 1
while !hasWaterAround(tile, radius)
radius++
tile.distanceFromWater = radius
Этот подход работает, но это довольно медленно, особенно, когда есть очень мало воды плитки.
Есть ли более быстрый алгоритм для нахождения расстояния от каждой плитки земли от воды?
Проверка A * подход [wiki] (https://en.wikipedia.org/wiki/A*_search_algorithm) – fl00r