Non riesci a scegliere il percorso più breve dalla tua posizione alla destinazione? Allora, dovresti conoscere questo algoritmo.
L’algoritmo di Floyd-Warshall è usato per trovare i percorsi più brevi tra tutte le coppie di vertici in un grafico, dove ogni bordo nel grafico ha un peso che è positivo o negativo.
Il più grande vantaggio di usare questo algoritmo è che tutte le distanze più brevi tra qualsiasi 2 vertici possono essere calcolate in O(V3), dove V è il numero di vertici in un grafico.
L’algoritmo di Floyd-Warshall è anche chiamato algoritmo di Floyd, algoritmo Roy-Floyd, algoritmo Roy-Warshall, o algoritmo WFI.
Questo algoritmo segue l’approccio di programmazione dinamica per trovare i percorsi più brevi.
Algoritmo
Per un grafico con N vertici:
Passo 1: Inizializza i percorsi più brevi tra qualsiasi 2 vertici con Infinity.
Passo 2: Trova tutte le coppie di percorsi più brevi che usano 0 vertici intermedi, poi trova i percorsi più brevi che usano 1 vertice intermedio e così via… fino ad usare tutti gli N vertici come nodi intermedi.
Passo 3: Minimizzare i percorsi più brevi tra qualsiasi 2 coppie nell’operazione precedente.
Passo 4: Per qualsiasi 2 vertici (i,j) , si dovrebbe effettivamente minimizzare le distanze tra questa coppia usando i primi K nodi, così il percorso più breve sarà: min(dist+dist,dist).
dist rappresenta il percorso più breve che usa solo i primi K vertici, dist rappresenta il percorso più breve tra la coppia k,j. Poiché il percorso più breve sarà una concatenazione del percorso più breve da i a k, poi da k a j.
for(int k = 1; k <= n; k++){ for(int i = 1; i <= n; i++){ for(int j = 1; j <= n; j++){ dist = min( dist, dist + dist ); } } }