Я полагаю, что вы можете улучшить ответ Якоба, комбинируя поиск из начальной точки с поиском из конечной точки.
На первом шаге начните с начальной точки и рассмотрите 2 пути поиска.
Путь, идущий влево, и путь, идущий направо
Каждая итерация делает шаг по обоим путям, пока не окажется по одному из путей ...
- ... вы нажали x (поиск, это самый короткий путь)
- ... вы попали в телепорт
В случае (2) поставить отметку на пути, который еще не попал в телепорт.
Теперь начните с конечной точки x и начните поиск также по 2 путям. Идем налево и направо, 1 шаг за каждую итерацию.
Теперь есть 2 возможных результата снова:
- вы попали в отмеченное место -> кратчайший путь идет от начала в направлении знака и достигает конца без телепортов.
- вы попали в телепорт -> ваш кратчайший путь идет от начала к телепорту на шаге (2), а затем от телепорта на шаге (4) к концу x.
Это найдет кратчайший путь за 2n шагов, где n - длина этого пути. (Так как вы всегда смотрите в 2 направлениях).