Итак, предположим, у меня есть лабиринт, у которого есть начальная и конечная точки, отмеченные оранжевым и красным соответственно, и моя цель — найти минимальное расстояние между ними. Заблокированный путь представлен черным цветом, а открытый путь представлен белым цветом. Однако есть две модификации, сделанные в этом.
- Есть несколько обязательных для посещения ячеек, отмеченных серым цветом.
- Любая ячейка может быть посещена любое количество раз (даже точки старта, финиша и обязательного посещения)
например: B=черный, W=белый, G=серый, R=красный, O=оранжевый
BBBBBB BBBBB
BBGBBB BWGGB
MAZE1 => BOWGRB MAZE2 => BOBBB
BBGBBB BWWRB
BBBBBB BBBBB
Вот в этом случае и будет
MAZE1 => M[2][1] => [2][2] => [1][2] => [2][2] => [3][2] => [2][2] => [2][3] => [2][4] = 7
MAZE2 => M[1][1] => [1][2] => [2][2] => [3][2] => [3][3] => [3][2] => [2][2] = 6
Как видите, узлы появляются несколько раз.
Сначала я подумал об использовании техники рекурсии (возврата), но не смог прийти к алгоритму. а также
Поэтому я подумал об использовании этого способа.
- Я буду отслеживать все координаты обязательных к посещению точек, начальные и конечные точки
- Найдите расстояние между каждым узлом (как и в сортировке выбором, мы сравниваем каждый термин, точно так же мы получаем минимальное расстояние между каждым узлом (используя BFS))
- Затем примените некоторый алгоритм минимального расстояния. Я подумал о TSP, но он говорит, что узлы должны быть посещены ровно один раз. Здесь это может быть несколько раз. Я нашел проблему китайского почтальона, но не знаю, можно ли ее применить здесь. Алгоритм Флойда Варшалла есть, но он не включает все точки
Как мне поступить, есть идеи?