Минимальное расстояние между началом и концом при прохождении должно посещать точки в лабиринте

Итак, предположим, у меня есть лабиринт, который имеет начальную и конечную точки, помеченные оранжевым и красным соответственно, и моя цель - найти минимальное расстояние между ними. Заблокированный путь представлен черным цветом, а открытый путь представлен белым цветом. Однако в этом есть две модификации.

Есть несколько клеток, которые нужно посетить, отмеченные серым цветом.Любую ячейку можно посетить любое количество раз (даже точки начала, окончания и посещения)

например, B = черный, W = белый, G = серый, R = красный, O = оранжевый

         BBBBBB                 BBBBB
         BBGBBB                 BWGGB
MAZE1 => BOWGRB     MAZE2  =>   BOBBB
         BBGBBB                 BWWRB
         BBBBBB                 BBBBB

Вот в этом случае ANS будет

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

Как видите, узлы появляются несколько раз

Сначала я подумал об использовании техники рекурсии (backtracking), но не смог прийти к алгоритму. а также

Поэтому я подумал об использовании этого способа.

Я буду отслеживать все координаты точек посещения, начальной и конечной точекНайти расстояние между каждым узлом (как в сортировке выбора, мы сравниваем каждый член, так же, как мы получаем минимальное расстояние между каждым узлом (используя BFS))Затем примените некоторый алгоритм минимального расстояния. Я думал о TSP, но он говорит, что узлы должны посещаться ровно один раз. Вот это может быть несколько раз. Я обнаружил проблему китайского почтальона, но не знаю, можно ли ее здесь применить. Алгоритм Флойда Уоршолла есть, но он не включает в себя все

Как мне поступить, любая идея?

Ответы на вопрос(1)

Ваш ответ на вопрос