Być może tak właśnie jest w oryginalnym plakacie poprzez "iterowanie każdej z możliwości ręcznie i przechowywanie najkrótszej ścieżki", ale pomyślałem, że chciałbym wyjaśnić, co wydaje się być rozwiązaniem bazowym.
Załóżmy, że masz już algorytm dwuetapowej najkrótszej ścieżki - ma klasyczne rozwiązania dla różnych rodzajów wykresów. Załóżmy, że wszystkie odległości są nieujemne, a d (A-> B-> C) = d (A-> B) + d (B-> C).
Najistotniejsze jest to, że droga rozpoczyna się w S przechodzi przez jeden z pośrednich miastach „ABCD”, a kończy się z E:
np SabcdE, SacbdE, itd ...
Tylko z 4 miast pośrednich, wyliczasz wszystkie 24 permutacje. Dla każdej permutacji użyj swojego najkrótszego algorytmu dwupunktowego do obliczenia ścieżki od głowy do ogona i całkowitej odległości.
Przyznany punkt początkowy i końcowy oferuje 12 możliwości podłączenia do abcd i do każdej z dwóch możliwości wnętrza. Już policzyłeś te odległości, więc dodaj odległość od S do głowy, a ogon do E. Wybierz minimum. Więc po wstępnym obliczeniu odległości pośrednich dla ustalonego zestawu miast wewnętrznych, musisz wykonać 12 punktów o najmniejszej ścieżce dla każdej pary punktów początkowych i końcowych.
To oczywiście słabo skaluje się wraz ze wzrostem liczby miast pośrednich. Nie jest dla mnie jasne, że może to zrobić lepiej, chyba że narzucisz większe ograniczenia na strukturę wykresu (czy to w fizycznej przestrzeni Euclidenan? Trójkąt nierówności?).
Mój przykład: przypuśćmy, że wszystkie odległości pośrednie między miastami to O (1). Bez ograniczeń na wykresie, odległość od S do dowolnego miasta pośredniego może wynosić 1000, z wyjątkiem jednego będącego 1. Takie samo dla ogona. Więc możesz zmusić pierwsze miasto do odwiedzin, żeby było cokolwiek. Teraz idź jedną warstwą w dół, weź pierwsze miasto jako "punkt początkowy". Zastosuj ten sam argument: możesz wykonać najlepszą ścieżkę do dowolnego z poniższych miast, manipulując odległościami na wykresie.
Wygląda więc na to, że złożoności nie da się uniknąć bez dodatkowych założeń.
Czy jest to wykres kierunkowy czy dwukierunkowy? Nie mogę powiedzieć. –
Niektóre z odpowiedzi tutaj (TSP, Floyd-Warshall, Szerokość po pierwszej, Oddział i Związany) wywodzą się z bardzo niespójnych i sprzecznych interpretacji tego pytania, więc jestem skłonny sądzić, że pytanie tutaj nie jest sformułowane bardzo dobrze . – Juliet
Pozwolę sobie krótko sformułować: przykładem jest, że biorę urlop i zatrzymuję się w jednym mieście. Chcę zobaczyć JAKIEKOLWIEK CZTERY miasta zaczynając od mojego i chcę podróżować jak najmniejszą odległością. Nie mogę odwiedzić tego samego miasta więcej niż jeden raz. –