Постройте график, построив четыре узла для каждой позиции в лабиринте. Каждый узел будет соответствовать определенному направлению: N, S, E, W.
Там будут ребра между каждым узлом и не более, чем тремя из его соседних соседей: те, которые находятся "спереди", "сзади" и "справа" (если они существуют). Ребро, ведущее к узлу в «front» и «back», будет иметь вес 0 (поскольку длина пути не имеет значения), тогда как ребро к узлу в «right» будет иметь вес 1 (это то, что представляет стоимость правого поворота).
Как только график настроен (и, вероятно, лучший способ сделать это - повторно использовать исходное представление лабиринта), модифицированный вариант алгоритма поиск в ширину решит проблему.
Хитрость для обработки весов ребра 0/1 заключается в использовании deque вместо стандартной реализации очереди. В частности, узлы, достигшие через грани веса 0, будут выдвигаться впереди deque, а узлы, достигаемые через грани веса 1, будут задвигаться сзади.