Система перехресть та тунелів природним чином задає граф: перехрестя є вершинами, а тунелі — ребрами. Оскільки тунелі двонапрямлені, граф є неорієнтованим.
Кількість світлофорів, що встановлюються на -му перехресті, дорівнює степеню вершини , тобто числу тунелів, інцидентних цьому перехрестю.
Заведемо масив , де — кількість тунелів, що прилягають до -го перехрестя. Тоді для кожного неорієнтованого ребра необхідно збільшити значення та на одиницю.
Приклад
Граф, наведений у прикладі, має наступний вигляд:
Реалізація алгоритму
Оголосимо масив , в якому зберігатимемо інформацію про тунелі.
#define MAX 110
int ton[MAX];Зчитуємо вхідні дані. Послідовно обробляємо кожен тунель, збільшуючи степені відповідних вершин графа.
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]++;
}Виводимо кількість світлофорів, необхідних на кожному перехресті.
for (i = 1; i <= n; i++)
printf("%d ",ton[i]);
printf("\n");