Il sistema di incroci e tunnel definisce naturalmente un grafo: gli incroci sono i vertici, mentre i tunnel sono gli archi. Poiché i tunnel sono bidirezionali, il grafo è non orientato.
Il numero di semafori da installare al -esimo incrocio è pari al grado del vertice , ovvero al numero di tunnel incidenti a tale incrocio.
Creiamo un array , dove — è il numero di tunnel adiacenti al -esimo incrocio. Allora, per ogni arco non orientato , è necessario incrementare di uno i valori e .
Esempio
Il grafo riportato nell'esempio ha il seguente aspetto:
Implementazione dell'algoritmo
Dichiariamo un array , in cui memorizzeremo le informazioni sui tunnel.
#define MAX 110
int ton[MAX];Leggiamo i dati in input. Elaboriamo in sequenza ciascun tunnel, incrementando i gradi dei vertici corrispondenti del grafo.
scanf("%d %d",&n,&m);
memset(ton,0,sizeof(ton));
for (i = 0; i < m; i++)
{
scanf("%d %d",&a,&b);
ton[a]++; ton[b]++;
}Stampiamo il numero di semafori necessari per ciascun incrocio.
for (i = 1; i <= n; i++)
printf("%d ",ton[i]);
printf("\n");