¿Cuál es el mejor algoritmo para encontrar una ruta más corta a través de todos los puntos de control dados?

Como otros ya notaron, esta es una versión del problema del vendedor ambulante. Sin embargo, a las otras respuestas les falta el hecho de que con solo 18 puntos de control podemos encontrar fácilmente la solución óptima, en un segundo en una computadora común.

En primer lugar, precalcule las distancias entre el inicio, el objetivo y cada uno de los puntos de control. Esto se puede hacer fácilmente mediante una búsqueda de amplitud.

Luego, use el algoritmo de programación dinámica [matemática] O (n ^ 2 2 ^ n) [/ matemática] para resolver el TSP. Esta es, en esencia, otra búsqueda de ruta más corta, pero esta vez tenemos vértices [matemáticos] O (n2 ^ n) [/ matemáticos] en nuestro gráfico. Cada vértice corresponde a un posible estado en el que podemos estar. Cada estado es un par (S, v), donde S es el conjunto de vértices que ya visitamos, y v es el vértice que visitamos por última vez. (En el programa, S puede representarse fácilmente con una máscara de bits). Y todo lo que necesitamos es el camino más corto desde ({inicio}, inicio) hasta (todo, objetivo).

Puedes resolver este problema en 2 pasos
1. Usando BFS para encontrar la ruta más corta entre cualquier par de puntos de control (incluyendo Inicio y Meta). En este paso, puede detectar que algún punto de control es inalcanzable y devolver -1
2. Después de tener la distancia entre cualquier par de puntos de control, ahora el problema es encontrar el orden de visita desde el inicio hasta el objetivo, incluidos todos los puntos de control con la ruta más corta. Este problema es más difícil, pero puede consultar mi publicación sobre este problema aquí Visite todos los estados con el camino más corto

Sí, este es el problema del vendedor ambulante. Calcule las distancias entre todos los puntos y luego aplique la cucharadita.

Puedes usar Floyd-warshall para encontrar todos los pares de caminos más cortos. Solo asegúrese de pesar los bordes adecuadamente: los que deben pasar deben tener pesos más bajos, el resto puede ser inifinity.

Es TSP, por lo que es NP difícil. Hasta donde se sabe, no puede haber soluciones de tiempo polinomiales para el problema. Si necesita una solución exacta, tendrá que conformarse con una solución de tiempo exponencial. De lo contrario, hay buenos algoritmos de aproximación. Investigue un poco sobre TSP.

Sí, mantenga la longitud diagonal y las longitudes de las rutas no permitidas infinitas, y dé la longitud de la unidad para las rutas permitidas y luego aplique tsp