Была алгоритмическая задачка, которая натолкнула меня на другую задачу, скорее математическую. Попытаюсь ее сформулировать.
Имеется прямоугольная доска
клеток. На некоторых клетках могут лежать камни, проход через такие клетки запрещен. Необходимо проложить кратчайший маршрут из левого верхнего в правый нижний угол (в этих двух угловых клетках камней точно нет), при этом за один шаг перемещаться можно на одну клетку в любом направлении, включая диагональные.
Решение организовано следующим образом: на текущей начальной клетке ставим единичку, затем на всех соседних, если они не заняты камнями и не выходят за края доски ставим двоечки, сохраняем координаты клеток, на которых проставили двойки, в отдельный временный массивчик coord (считаем, что для хранения координат одной клетки нужен один элемент этого массива). Затем, для всех клеток, координаты которых записаны в coord находим соседние клетки, на которых еще не написано число и не стоит камень, ставим там число на единицу больше и координаты этих новонайденных клеток снова сохраняем в наш массив coord. Так движемся по доске, проставляя новые числа по мере удаления от начальной точки, пока не дойдем до конечной точки, на каждом шаге очищая предыдущие данные и записывая координаты новых чисел в coord. Вопрос с том, какой минимальный размер coord является достаточным для хранения координат клеток для любого шага.