Logo NEXUS

NEXUS didattica

← Torna indietro
Informatica / Lezione Teorico-Pratica

Teoria e Algoritmi sui Grafi

Strutture dati non lineari per modellare relazioni complesse: matrici di adiacenza, liste, visite BFS e DFS.

1. Introduzione e Modelli di Rappresentazione

Un grafo $G = (V, E)$ è costituito da un insieme di vertici (o nodi) $V$ e da un insieme di archi $E$ che collegano coppie di vertici. I grafi possono essere orientati (direzionati) o non orientati, pesati o non pesati. Le due tecniche principali per memorizzare un grafo in memoria sono:

// Esempio di struttura per Lista di Adiacenza in C++ #include <vector> #include <list> class Graph { int V; std::vector<std::list<int>> adjList; public: Graph(int v) : V(v), adjList(v) {} void addEdge(int u, int v) { adjList[u].push_back(v); adjList[v].push_back(u); // Se non orientato } };

2. Algoritmi di Visita: BFS e DFS

L'attraversamento sistematico di un grafo permette di esplorare i componenti connessi e trovare percorsi:

Complessità Computazionale:

Sia con Liste di Adiacenza: $\mathcal{O}(V + E)$
Sia per DFS che per BFS, ogni vertice e arco viene esaminato al massimo un numero costante di volte.

3. Simulatore Interattivo: Visita del Grafo

Seleziona l'algoritmo di esplorazione applicato al grafo campione di test ($V = 5$ nodi).

graph-engine@nexus-core:~# Graph Traversal Simulator
> Grafo di test caricato: Nodi [0, 1, 2, 3, 4] con archi collegati. Seleziona l'algoritmo e avvia la simulazione.