Forse questo è ciò che il manifesto originale intende "iterando attraverso ogni possibilità manualmente e memorizzando il percorso più breve", ma ho pensato che mi piacerebbe rendere esplicita quella che sembra essere una soluzione di base.
Supponiamo che tu abbia già un algoritmo a due punti di percorso più breve - questo ha soluzioni classiche per vari tipi di grafici. Si supponga che tutte le distanze siano non negative e d (A-> B-> C) = d (A-> B) + d (B-> C).
Gli elementi essenziali sono che il percorso inizia S passa attraverso una delle città intermedie "ABCD" e termina con E:
esempio SabcdE, SacbdE, ecc ...
Con solo 4 città intermedie, si elencano tutte e 24 le permutazioni. Per ogni permutazione usa il tuo algoritmo a due punti più breve per calcolare il percorso dalla testa alla coda e la sua distanza totale.
Quindi, dato il punto di partenza e di arrivo, ci sono 12 possibilità di collegamento a una di abcd e per ogni due possibilità per l'interno. Hai già calcolato queste distanze, quindi aggiungi la distanza da S alla testa e la coda a E. Scegli il minimo. Quindi, una volta che hai precalcolato le distanze intermedie per un insieme fisso di città interne, devi fare 12 problemi con il percorso più breve in due punti per ogni coppia di punti iniziali e finali.
Questo ovviamente peggiora scarsamente con il numero crescente di città intermedie. Non è chiaro per me che potrebbe fare meglio a meno che non impongano maggiori restrizioni sulla struttura del grafico (è questo in uno spazio fisico di Euclidenan? Disuguaglianza del triangolo?).
Il mio esempio di riflessione: supponiamo che tutte le distanze intermedie tra le città siano O (1). Senza alcuna restrizione sul grafico, la distanza da S a qualsiasi città intermedia potrebbe essere 1000 tranne che per uno è 1. Lo stesso per la coda. Quindi puoi costringere la prima città a essere visitata per essere qualsiasi cosa. Ora, abbassa uno strato, prendi la prima città come "punto di partenza". Applica lo stesso argomento: puoi fare in modo che il percorso migliore vada in una delle seguenti città manipolando le distanze nel grafico.
Quindi sembra che la complessità non possa essere aiutata senza ulteriori presupposti.
fonte
2009-10-04 06:54:24
È un grafico direzionale o bidirezionale? Non posso dirlo –
Alcune delle risposte qui (TSP, Floyd-Warshall, Breadth-First, Branch e Bound) derivano da interpretazioni incoerenti e contraddittorie di questa domanda, quindi sono propenso a pensare che la domanda qui non sia formulata molto bene . – Juliet
Lasciatemi brevemente riformulare: un esempio è che sto facendo una vacanza e sto in una città. Voglio vedere QUALSIASI QUATTRO città partendo dalla mia e voglio viaggiare la minima distanza possibile. Non posso visitare la stessa città più di una volta. –