Come è stato ripetutamente menzionato, si tratta di un problema NP-difficile. Se il tuo problema è limitato a 5 vertici, allora puoi sicuramente forzare la tua strada verso la soluzione, come Eric Tressler menziona sopra. Vorrei aggiungere i miei due centesimi, però, perché trovo che i problemi difficili siano affascinanti ...
Se desideri che il tuo algoritmo sia trattabile, questa soluzione non funzionerà, perché man mano che il numero di vertici nel tuo grafico cresce, raggiungerà un punto che sarà semplicemente impossibile per il tuo algoritmo calcolare un percorso più breve durante la nostra vita (o persino dell'universo, a seconda di come hanno i vertici del tuo grafico). Esistono algoritmi di approssimazione per varianti del problema che potresti trovare interessante, sebbene ...
Esiste una 2-approssimazione (che in breve significa che si può dimostrare che il risultato restituito da questo algoritmo è a MOST 2 volte la lunghezza della rotta ottimale effettiva ... quindi potrebbe effettivamente restituire la rotta ottimale reale, qualcosa al massimo 2 volte la lunghezza, o qualsiasi altra via di mezzo, a seconda dell'ingresso) dell'algoritmo per il problema del venditore ambulante metrico. Questo è un caso speciale del problema del venditore ambulante in cui la distanza interurbana soddisfa la disuguaglianza triangolare, quindi non è lo stesso problema.
L'assunto fatto sta semplicemente cercando di far rispettare la disuguaglianza triangolare (ad esempio se hai il triangolo ABC, il percorso più breve tra A e C è AC rispetto a ABC. Ecco l'algoritmo che funziona in tempo polinomiale per TSP metrico:
G - il grafico G (V, E), dove V è l'insieme di vertici ed E è l'insieme di spigoli.
C - funzione di costo definita come C: E- > N_o (la parte metrica ... il costo per prendere un margine)
ApproxMetricTSP(G, C):
-Build a minimum spanning tree T (use Kruskal's or Prim's algorithms for
this)
-Run Depth-First-Search on T and keep track of the order in which the
vertices are discovered
-Return the cycle induced by the discovery order of vertices as H, the
Hamiltonian cycle.
L'edificio T richiede tempo O (V ^ 2).
La parte DFS può essere eseguita in O (V), quindi l'algoritmo è O (V ^ 2).
Per ulteriori informazioni, consulta questo link !