Вуаля! Ответ заключается в рекурсии:
Функция принимает ваш массив как arr
, а координаты (или индексы) 1
, которые вы знаете в виде кортежа (x, y)
, в качестве аргументов.
При использовании относительных координат мы вызываем функцию flood_fill для каждого из них:
function flood_fill(arr, (x, y))
# check every element in the neighborhood of the element at (x, y) in arr
for x_off in -1:1
for y_off in -1:1
# put the next part in a try-catch block so that if any index
# is outside the array, we move on to the next element.
try
# if the element is a 1, change it to an 8 and call flood_fill
# on it so it fills it's neighbors
if arr[x + x_off, y + y_off] == 1
arr[x + x_off, y + y_off] = 8
flood_fill(arr, (x + x_off, y + y_off))
end
catch
continue
end
end
end
end