Ok, ho postato questa domanda perché di questo esercizio:grafico - Dijkstra per il singolo-Source percorso più lungo
Possiamo modificare l'algoritmo di Dijkstra per risolvere il single-source problema più lungo percorso modificando minimo al massimo? Se è così, prova che il tuo algoritmo è corretto. In caso contrario, fornire un controesempio.
Per questo esercizio o tutto ciò che riguarda l'algoritmo di Dijkstra, presumo non ci sono pesi negativi nel grafico. Altrimenti, non ha molto senso, poiché anche per il problema del percorso più breve, Dijkstra non può funzionare correttamente se esiste un margine negativo.
Ok, la mia intuizione ha risposto per me:
Sì, penso che può essere modificato.
Ho appena
- inizializzazione array di distanza per MININT
- cambiamento
distance[w] > distance[v]+weight
adistance[w] < distance[v]+weight
Poi ho fatto qualche ricerca per verificare la mia risposta. Ho trovato questo post:
Longest path between from a source to certain nodes in a DAG
Per prima cosa ho pensato che la mia risposta era sbagliata a causa del post di cui sopra. Ma ho scoperto che forse la risposta nel post qui sopra è sbagliata. È stato modificato Il problema di percorso più lungo della singola origine con Il problema del percorso più lungo.
Anche nel wiki di Bellman–Ford algorithm, esso detta correttamente:
L'algoritmo di Bellman-Ford calcola sorgente unica percorsi più brevi in un grafo orientato ponderata. Per i grafici con solo spigoli di bordo non negativi, l'algoritmo di Dijkstra più veloce risolve anche il problema. Pertanto, Bellman-Ford viene utilizzato principalmente per i grafici con pesi negativi.
Quindi penso che la mia risposta sia corretta, giusto? Dijkstra può davvero essere Il problema di percorso più lungo di e le mie modifiche sono anche corrette, giusto?
@Kristo, puoi dare un'occhiata? –