1. Cos'è l'Algoritmo di Dijkstra?
L'algoritmo di Dijkstra è uno dei più importanti ed efficienti algoritmi nella teoria dei grafi. Sviluppato dall'informatico olandese Edsger W. Dijkstra nel 1959, risolve il problema del cammino minimo a sorgente singola (Single-Source Shortest Path) su un grafo orientato o non orientato i cui archi presentano pesi non negativi ($\ge 0$).
L'obiettivo è determinare la distanza minima dal nodo di partenza (sorgente) verso tutti gli altri vertici raggiungibili all'interno della struttura reticolare.
2. Meccanismo di Funzionamento e Codice C++
L'algoritmo adotta un approccio greedy (ingordo). Mantiene un vettore delle distanze provvisorie inizializzate a infinito ($\infty$) tranne per la sorgente posta a $0$, e utilizza una coda di priorità (`std::priority_queue`) per selezionare in modo efficiente il nodo non visitato con la distanza minima corrente.
3. Analisi della Complessità
- Complessità Temporale $\mathcal{O}((V + E) \log V)$: Utilizzando una coda di priorità basata su heap binario, ogni inserimento e rimozione richiede $\log V$ operazioni. $V$ è il numero di vertici ed $E$ il numero di archi.
- Complessità Spaziale $\mathcal{O}(V + E)$: Necessaria per la memorizzazione della lista di adiacenza del grafo, del vettore delle distanze e dello stack della coda di priorità.
4. Simulatore Interattivo: Algoritmo di Dijkstra
Seleziona il nodo di partenza (da 0 a 4) per calcolare i cammini minimi su un grafo campione predefinito di prova.