Quindi, prima definiamo l'algoritmo Dijkstra:
L'algoritmo di Dijkstra trova percorsi più brevi a sorgente singola in un grafico orientato con pesi di bordo non negativi.
Desidero sapere come posso salvare la forma di percorso più breve da s a t con l'algoritmo Dijkstra.
Ho cercato su google, ma non ho trovato nulla di particolare; Ho anche modificato l'algoritmo di Dijkstra, ma non ho potuto ottenere alcuna risposta. Come posso salvare il percorso più breve da s a t con Dijkstra?
So che la mia domanda è semplice e poco professionale, ma qualsiasi aiuto sarebbe apprezzato. Grazie per aver considerato la mia domanda.come salvare il percorso più breve nell'algoritmo dijkstra
risposta
Se si guarda alla pseudocode dal link Wikipedia hai dato, si vedrà un array in là chiamato prev[]
. Questa matrice contiene, per ciascun nodo v nel grafico, il nodo precedente u nel percorso più breve tra il nodo sorgente s e v. (. Questo vettore è chiamato anche predecessore o genitore array)
In altre parole, il percorso più breve tra s e v è:
s -> u -> v
where u = prev[v]
Il percorso dal s a u potrebbe avere diversi nodi in mezzo, in modo da ricostruire il percorso da s a v, basta camminare indietro lungo il percorso definito dal prev[]
array usando il frammento di codice sotto la pseudocodice principale (bersaglio è v):
1 S ← empty sequence
2 u ← target
3 while prev[u] is defined: // Construct the shortest path with a stack S
4 insert u at the beginning of S // Push the vertex onto the stack
5 u ← prev[u] // Traverse from target to source
6 end while
La maggior parte delle librerie che utilizzano questo algoritmo probabilmente ti daranno un modo per farlo. Ma in generale, tieni traccia del percorso di ogni nodo. Vale a dire dare ad ogni nodo un attrribute shortestPathToNode
in cui memorizzare l'elenco dei nodi
Un modo estremamente breve per farlo è quello di utilizzare la ricorsione e un "array principale". Se si inizializzano tutti i genitori dei punti su -1, e poi come si completa dijkstra, si aggiorna l'array genitore, si può ricorrere indietro da qualsiasi punto fino ad arrivare alla fonte e stampare il percorso. Ecco una breve e facile da capire ricorsione frammento:
// Function to print shortest path from source to j using parent array
void path(parent array, int j)
{
// Base Case : If j is source
if (jth element of parent is -1) return;
path(parent, jth element of parent);
print j;
}
Nota che invece di stampa "j" fuori, è possibile memorizzare in un vettore globale (o altro tipo di dati per le lingue che non sono C-correlati) per un uso successivo.
- 1. Trovare il percorso più breve usando l'algoritmo Dijkstra
- 2. Trovare il percorso più breve con FGL
- 3. Boost dijkstra shortest_path - come puoi ottenere il percorso più breve e non solo la distanza?
- 4. Modifica dell'algoritmo di Dijkstra per ottenere il percorso più breve tra due nodi
- 5. : percorso più breve tra tutti i punti
- 6. grafico - Dijkstra per il singolo-Source percorso più lungo
- 7. Algoritmo di percorso più breve di Dijkstra con costo del fronte
- 8. Calcolare il percorso più breve attraverso un negozio di alimentari
- 9. Percorso più breve: DFS, BFS o entrambi?
- 10. Come ottenere il percorso più breve tra due punti in google maps
- 11. Algoritmo del percorso più breve usando i dizionari [Python]
- 12. Esistono algoritmi più veloci di Dijkstra?
- 13. Il percorso più breve per visitare tutti i nodi
- 14. Percorso più breve dopo il raddoppio dei pesi dei contorni
- 15. di interpretazione Dijkstra Algoritmo
- 16. Come trovare il percorso più breve in un grafico ponderato usando networkx?
- 17. Ottimizzazione dell'algoritmo: percorso più breve tra più punti
- 18. Come calcolare il percorso più breve tra due punti in una griglia
- 19. Algoritmo dijkstra su iOS
- 20. Query riguardante l'algoritmo dijkstra
- 21. Percorso più breve con numero pari di spigoli
- 22. Esempio di percorso più breve di Giraph ClassNotFoundException
- 23. Come trovare il percorso più breve con il numero minimo di hop in Neo4j?
- 24. Percorso più breve per trasformare una parola in un'altra
- 25. Qual è l'algoritmo/soluzione più semplice per un singolo percorso più breve attraverso un grafico non orientato ponderato reale?
- 26. Come implementare l'algoritmo di Dijkstra in Neo4j usando Cypher
- 27. Rilassamento di un fronte nell'algoritmo di Dijkstra
- 28. Come si usa un BFS bidirezionale per trovare il percorso più breve?
- 29. API MAP Google: come tracciare il percorso aereo più breve tra due punti geografici?
- 30. Il modo più breve per compilare ArrayList