Статья Автор: Деникина Н.В., Деникин А.В.

Путь в лабиринте

Условие: Найди путь из левого верхнего угла (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, [], {})
Печать