La distancia mínima entre el inicio y el final al pasar debe visitar puntos en un laberinto

Entonces, supongamos que tengo un laberinto, que tiene un punto de inicio y un punto final, marcado con Naranja y rojo respectivamente y mi objetivo es encontrar la distancia mínima entre ellos. La ruta bloqueada está representada por el color negro y la ruta abierta está representada por el color blanco. Sin embargo, hay dos modificaciones hechas en esto.

Hay algunas celdas que se deben visitar, marcadas en color gris.Se puede visitar cualquier celda cualquier número de veces (incluso el inicio, el final y deben visitar puntos)

para ex B = negro, W = blanco, G = gris, R = rojo, O = naranja

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

Aquí en este caso ans será

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

Como puede ver, los nodos aparecen varias veces

Primero pensé en usar la técnica de recursión (retroceso) pero no pude llegar a un algoritmo. y

Entonces pensé en usar de esta manera.

Realizaré un seguimiento de todas las coordenadas de los puntos de visita obligatoria, los puntos de inicio y finalización.Encuentre la distancia entre cada nodo (como en la selección, comparamos cada término, así, obtenemos la distancia mínima entre cada nodo (usando BFS))Luego aplique un algoritmo de distancia mínima. Pensé en TSP pero dice que los nodos deben ser visitados exactamente una vez. Aquí puede ser varias veces. Encontré un problema de cartero chino, pero no sé si se puede aplicar aquí. El algoritmo de Floyd Warshall está ahí pero no incluye todos los puntos

¿Cómo debo proceder, alguna idea?

Respuestas a la pregunta(1)

Su respuesta a la pregunta