Страница 2 из 2

Добавлено: 18 ноя 2004, 22:58
Kerghan
Romeo, отличный алгоритм кстати ;) . Можно оптимизировать чуть при желании - запоминать координаты последних измененных соседей, чтобы не отыскивать их потом по всей таблице(ну это актуально лишь для достаточно больших матриц).

Я когда-то делал иначе, причем с реальным лабиринтом =). Попытаюсь описать на уровне идеи.
1. В начальную ячейку пишем "1",кладем координаты начальной ячеки в очередь(массив, или связный список структур, включающих в себя координаты ячейки; очередь имеет голову и хвост - указатели на последний внесенный элемент и первый)
2. Достаем из очереди координаты ячейки; затем пробегаем вверх по массиву от этой ячейки, пока не "упремся в стену" или край лабиринта или значение, которое хотим записать больше того, что уже есть в клеточке. Каждый раз увеличиваем значение при каждом перемещении на одну клеточку и записываем в клеточку; кладем координаты этой клеточки в очередь. Аналогично двигаемя вправо влево и вниз.
3. Если хвост "догнал" голову, останавливаемся, иначе смотри п.2. В итоге, будем иметь заполненный массив с длинами путей(кратчайших) до всех ячеек лабиринта, или нули(или что там по умолчанию) для ячеек, путей к которым нету.

Работает это дело примерно так: сначала у нас где-то есть единница. Потом от нее "вырисовывается крестик 123456....." . Потом заполняются строки и столбцы, перпендикулярные сторонам "крестика" и тд. Как найти обратный путь уже предложил Romeo (я тоже так искал.)
Исходничек у меня де-то валялся, на Паскале правда. Если сильно нада - могу попробовать поискать =)...

Добавлено: 29 ноя 2004, 07:58
Hater
Исходничек у меня де-то валялся, на Паскале правда. Если сильно нада - могу попробовать поискать =)...
Слушай, если не сложно, кинь мне этот исходник на мыло. Если, конечно, не сложно, и если найдёшь. Мне и на Паскале подобный исходник не помешает. Заранее спасибо. 515_hatesmyself@rambler.ru

Добавлено: 29 дек 2004, 22:51
_Gemini
Hater, Алгоритм описанный Romeo, называется волновым - так что делаешь поиск в своем любимом поисковике по запросу "волновой алгоритм" - и воаля :-)) Вот что мне первым попалось - реализация как на С так и на Паскале http://algolist.manual.ru/games/wavealg.php

Добавлено: 29 дек 2004, 22:52
_Gemini
Но вообще лучше самому с нуля написать - IMHO