Условие: Найди путь из левого верхнего угла (0,0) в правый нижний (2,2)
0 1 2
┌───┬───┬───┐
0 │ S │ │ █ │ S = старт
├───┼───┼───┤ F = финиш
1 │ █ │ │ │ █ = стена
├───┼───┼───┤
2 │ │ │ F │
└───┴───┴───┘
ДАННЫЕ:
лабиринт ← [[0,0,1], [1,0,0], [0,0,0]] // 0=проход, 1=стена
АЛГОРИТМ НайдиПуть(x, y, путь, посещено)
// Проверка границ
ЕСЛИ x < 0 ИЛИ x > 2 ИЛИ y < 0 ИЛИ y > 2 ТО
ВЫЙТИ ИЗ АЛГОРИТМА
КОНЕЦ ЕСЛИ
// Проверка стены
ЕСЛИ лабиринт[y][x] = 1 ТО
ВЫЙТИ ИЗ АЛГОРИТМА
КОНЕЦ ЕСЛИ
// Проверка: уже были здесь
ЕСЛИ (x, y) ЕСТЬ В посещено ТО
ВЫЙТИ ИЗ АЛГОРИТМА
КОНЕЦ ЕСЛИ
// Делаем шаг
ДОБАВИТЬ (x, y) В КОНЕЦ путь
ДОБАВИТЬ (x, y) В посещено
// Проверка: дошли до финиша!
ЕСЛИ x = 2 И y = 2 ТО
ВЫВЕСТИ "Путь найден:", путь
ИНАЧЕ
// Пробуем все направления
НайдиПуть(x + 1, y, путь, посещено) // вправо
НайдиПуть(x - 1, y, путь, посещено) // влево
НайдиПуть(x, y + 1, путь, посещено) // вниз
НайдиПуть(x, y - 1, путь, посещено) // вверх
КОНЕЦ ЕСЛИ
// Возврат
УДАЛИТЬ ПОСЛЕДНИЙ ЭЛЕМЕНТ ИЗ путь
УДАЛИТЬ (x, y) ИЗ посещено
КОНЕЦ АЛГОРИТМА
// Запуск
НайдиПуть(0, 0, [], {})