Кількість висячих вершин 1#5080

Кількість висячих вершин 1 (Розбір)

Для кожної вершини підрахуємо кількість вершин, суміжних з нею. Якщо це число дорівнює , то вершина є висячою.

Приклад

Графи, наведені у прикладах, мають наступний вигляд:

У першому прикладі граф містить дві вершини степеня . Отже, у ньому дві висячі вершини.

У другому прикладі вершин степеня (висячих) немає.

Реалізація алгоритму

Оголосимо масив , де — кількість вершин, суміжних з вершиною .

#define MAX 1010
int m[MAX];

Читаємо матрицю суміжності неорієнтованого графа. Для кожного ребра збільшуємо значення на (значення збільшиться на , коли розглядатиметься ребро ).

scanf("%d",&n);
memset(m,0,sizeof(m));
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
{
  scanf("%d",&val);
  if (val) m[i]++;
}

Якщо m[i] = 1, то вершина з'єднана рівно з однією вершиною, тобто є висячою. Підраховуємо кількість таких вершин і зберігаємо результат у змінній .

res = 0;
for (i = 0; i < n; i++)
  if (m[i] == 1) res++;

Виводимо відповідь.

printf("%d\n",res);