Каким образом у вас выглядит связь между дискретными клетками 2.1 и 2.0 ?
У вас должно быть для клетки 2.1 указано, что оттуда можно попасть в 2.0. через район 1.
Соответственно, если это не указано, то дискретная волна туда и не пойдет.
все связи записаны. их можно легко определить. обновляются вместе с соседями при изменении д.клетки. любая клетка точно знает все доступные связи с соседями. запись: (мой район N) == направление N район соседа
И еще.... вы понимаете, что у вас в клетку 2.1 должно быть как бы два независимых входа? ...
входы есть (картинка выше). если стартовую точку переставить на 2.2, то волна спокойно дойдет до финиша.
проблема в том, что волна сама перекрывает "взгляд" будущим шагам на правильных соседей: волна вышла из 0.2 ... из 1.1 наступаю на 2.1 и помечаю волной, т.к могу попасть в его район "два".
и только уже после, из списка клеток для обработки выходит клетка 2.2 и не может посмотреть на связи соседа 2.1, так как не проходит через условие "если д.клетка не помечена, то ... проверяем связи... есть связь, добавляем клетку в список следующего шага"
... первый через район 1, а второй через район 2. И это будет 2 независимые волны.
как может быть две волны? зачем? разве одной из "старта" не достаточно? похоже я не могу уловить именно это.
я представляю дискретные клетки как обычные, и тупо из старта распускаю одну единственную волну, которая перебирает заготовленные связи с соседями - если есть связь по районам, то пометил, иначе игнорирую, так или иначе иду дальше. и так до финиша.
Вопрос чересчур объемно сформулирован
тег споилера не работает. а так бы сложил туда лишнее.