To może zbyt późno, ale Nikt nie zapewniono jasne wyjaśnienie, jak działa algorytm
Pomysł Dijkstra jest proste, niech mnie pokaż to za pomocą następującego pseudokodu.
Dijkstra dzieli wszystkie węzły na dwa odrębne zestawy. Nierozliczone i rozliczone. Początkowo wszystkie węzły znajdują się w zbiorze nierozliczonym, np. muszą one być nadal oceniane.
Najpierw tylko węzeł źródłowy jest umieszczany w zbiorze Utrwalonych węzłów. Określony węzeł zostanie przeniesiony do ustalonego zestawu, jeśli zostanie znaleziona najkrótsza ścieżka ze źródła do określonego węzła.
Algorytm działa, dopóki nierozstrzygnięty zbiór Nodes nie jest pusty. W każdej iteracji wybiera węzeł o najniższej odległości do węzła źródłowego z nierozliczonego zestawu Nodes. Na przykład. Odczytuje wszystkie krawędzie wychodzące ze źródła i ocenia każdy węzeł docelowy z tych krawędzi, które jeszcze nie zostały ustalone.
Jeśli znana odległość od źródła do tego węzła może zostać zmniejszona, gdy używana jest wybrana krawędź, odległość jest aktualizowana, a węzeł jest dodawany do węzłów wymagających oceny.
Należy pamiętać, że Dijkstra określa także pre-następcę każdego węzła w drodze do źródła. Zostawiłem to z pseudo kodu, aby go uprościć.
kuponów do Lars Vogel
Nie ma powodu, aby nie używać tutaj algorytmu Dijkstry. Wyszukuje najkrótszą odległość między punktem początkowym a wszystkimi celami podróży, a następnie po prostu wybiera miejsce docelowe z gotowej listy lub mapy wyników. – SplinterReality
Myślę, że jest powód, by nie używać Dijkstry w tym przypadku. Dijkstra dobrze jest obliczyć odległość od punktu początkowego do wszystkich węzłów na mapie. Jeśli chcesz tylko odległość do jednego punktu, A * jest szybszy. Zasadniczo ten sam algorytm oczekuje, że A * nie rozwinie niechcianych węzłów. Zarówno Dijkstra, jak i A * mogą być implementowane za pomocą sterty Fibonacciego (jeśli zależy ci na wydajności) i będą wyglądać bardzo podobnie w kodzie. Oczywiście potrzebujesz heurystyki dla A *. Jeśli go nie masz, to Dijkstra jest naprawdę bardzo dobra. – phoenix7360
Nie wspomniałem o metodzie heurystycznej tylko dlatego, że nie ma ona związku z tak małym problemem. Jeśli szukamy sposobu jazdy z Nowego Jorku do Kalifornii, Dijkstra jest złym wyborem z oczywistych powodów, ale w tym przypadku: "Nie ma powodu, aby nie używać tutaj algorytmu Dijkstry". – SplinterReality