Quizás esto es lo que significa el cartel original al "iterar manualmente a través de cada posibilidad y almacenar la ruta más corta", pero pensé que me gustaría hacer explícita lo que parece ser una solución de referencia.
Supongamos que ya tiene un algoritmo de ruta más corta de dos puntos; esto tiene soluciones clásicas para varios tipos de gráficos. Suponga que todas las distancias son no negativas y d (A-> B-> C) = d (A-> B) + d (B-> C).
Lo esencial es que el camino comienza en S pasa a través de una de las ciudades intermedias "ABCD" y termina con E:
por ejemplo SabcdE, SacbdE, etc ...
Con solo 4 ciudades intermedias, enumera las 24 permutaciones. Para cada permutación use su algoritmo de dos puntos más corto para calcular el camino de la cabeza a la cola, y su distancia total.
Luego, dado el punto de inicio y el punto final, hay 12 posibilidades asociadas a una de abcd y para cada dos posibilidades para el interior. Ya ha calculado estas distancias, por lo que agrega la distancia de S a la cabeza y la cola a E. Elija un mínimo. Entonces, una vez que ha calculado previamente las distancias intermedias para un conjunto fijo de ciudades interiores, necesita hacer 12 problemas de ruta más cortos de dos puntos para cualquier par de puntos de inicio y final.
Esto, evidentemente, escasea mal con el aumento del número de ciudades intermedias. No está claro para mí que podría hacerlo mejor a menos que impongas mayores restricciones en la estructura del gráfico (¿es esto en un espacio físico euclidiano? ¿Desigualdad triangular?).
Mi ejemplo de pensamiento: supongamos que todas las distancias intermedias entre ciudades son O (1). Sin restricción en el gráfico, la distancia de S a cualquier ciudad intermedia puede ser de 1000, excepto que una es 1. Lo mismo para la cola. Entonces puedes forzar a la primera ciudad a ser visitada para que sea cualquier cosa. Ahora, baje una capa, tome la primera ciudad como el "punto de inicio". Aplique el mismo argumento: puede hacer que la mejor ruta vaya a cualquiera de las siguientes ciudades al manipular las distancias en el gráfico.
Parece que no se puede evitar la complejidad sin suposiciones adicionales.
¿Es este un gráfico direccional o bidireccional? No puedo decir. –
Algunas de las respuestas aquí (TSP, Floyd-Warshall, Breadth-First, Branch y Bound) se derivan de interpretaciones totalmente contradictorias y contradictorias de esta pregunta, por lo que me inclino a pensar que la pregunta aquí no está redactada muy bien . – Juliet
Permítanme reformular brevemente: un ejemplo es que me estoy tomando unas vacaciones y me estoy quedando en una ciudad. Quiero ver CUALQUIER CUATRO ciudades comenzando desde la mía y quiero viajar la menor distancia posible. No puedo visitar la misma ciudad más de una vez. –