В настоящее время мы программируем игру (это довольно неизвестный язык: modula 2). И проблема, с которой мы столкнулись, заключается в следующем: у нас есть лабиринт (не идеальный лабиринт) в сетке 17 x 12. Компьютер должен проложить путь от начальной точки (9, 12) до конечной точки (9, 1). Я нашел несколько алгоритмов, но они не работают, когда роботу нужно вернуться:
xxxxx
x
=> x
x
xxx
or:
xxxxx
x
xxxxxx x
x x
x x
xxxxxx x
=> x
xxxxxxxxx
Я нашел решение для первого типа примера, но потом второй тип не мог быть решен, и решение, которое я придумал для второго типа, заставило бы робота застрять в ситуации первого типа.
Это много кода, поэтому я дам идею:
ПОКА (конечный пункт не достигнут) СДЕЛАЙТЕ {старайтесь идти направо, если вас ничего не мешает: идите направо, если вы встретите блок, пробуйте вверх, пока не сможете идти направо, если вы больше не можете подниматься, попробуйте спуститься вниз, пока не сможете пойти направо, (начиная с того места, где вы были заблокированы в первый раз), если вы больше не можете спуститься вниз, попробуйте сделать один шаг влево и заполните пробелы, которые вы тестировали, блоками. }
Это работает для первого типа проблем ... не для второго. Возможно, я начал неправильно, поэтому я открыт для лучших алгоритмов или решений, в частности, как я мог бы улучшить свой алгоритм.
Большое спасибо!!