Module: Algoritmo di Dijkstra


Problem

8/14

Algoritmo di Dijkstra in O(M logN) c set: Start (C++)

Theory Click to read/hide

Poiché il comportamento asintotico dell'ingenua implementazione dell'algoritmo di Dijkstra è: \(O(n^2 + m)\), all'aumentare del numero di vertici, la velocità del lavoro diventa insoddisfacente.
 Varie strutture di dati possono essere utilizzate per il miglioramento: Fibonacci heap, set set o una coda di priorità priority_queue. 
Considera un esempio con set, come risultato, l'asintotico finale è: \(O(n log (m))\) , dettagli.

Problem

Ti viene fornito un grafico ponderato diretto. Trova la distanza più breve da un dato vertice a un altro.
 
Input
La prima riga contiene tre numeri: N, M, S e F (1≤ N≤ 100, 1≤ S, F≤ N), dove N – numero di vertici del grafico, M – numero di costole,  S– vertice iniziale e F – finale. Nelle successive N righe, inserisci N numeri ciascuno, non superiore a 100, – grafico matrice di adiacenza, dove -1 significa nessun bordo tra i vertici e qualsiasi numero non negativo – la presenza di un bordo di peso dato. Gli zeri sono scritti sulla diagonale principale della matrice.
 
Uscita
È necessario visualizzare la distanza desiderata o -1 se non esiste un percorso tra i vertici specificati.

Esempi
# Input Uscita
1 4 4 3 4
3 1 3
1 2 3
2 4 3
3 4 10
9