Дан простой неориентированный невзвешенный граф.
Подсчитать количество висячих вершин в нем. Вершина называется висячей, если ее
степень равна 1.
Вход. В первой строке находится число n (1 ≤ n ≤ 1000). В следующих n
строках находится матрица смежности.
Выход. Выведите
количество висячих вершин в графе.
Пример входа 1 |
Пример выхода 1 |
2 0 1 1 0 |
2 |
|
|
Пример входа 2 |
Пример выхода 2 |
3 0 1 1 1 0 1 1 1 0 |
0 |
графы
Для каждой
вершины i подсчитаем количество
вершин, смежных с ней. Если это число равно 1, то i висячая.
Графы,
приведенные в примерах, имеют вид:
В первом примере
граф содержит две вершины со степенью 1. Следовательно две вершины в нем
висячие.
Во втором
примере вершин со степенью 1 (висячих) нет.
Объявим массив m. В m[i]
будем подсчитывать количество вершин, смежных с i.
#define MAX 1010
int
m[MAX];
Читаем матрицу смежности неориентированного графа. Для
каждого ребра (i, j) увеличим на 1 значение m[i] (m[j] на 1 увеличится соответственно когда будет рассматриваться ребро
(j,
i) ).
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,
то с вершиной i связана только одна
вершина, то есть i является висячей.
Подсчитываем количество висячих вершин в переменной res.
for(res
= i = 0; i < n; i++)
if (m[i] ==
1) res++;
printf("%d\n",res);
Java реализация
import java.util.*;
//import java.io.*;
public class Main
{
public static void main(String[] args) // throws
IOException
{
//Scanner con
= new Scanner(new FileReader ("5080.in"));
Scanner con = new Scanner(System.in);
int n = con.nextInt();
int m[] = new int[n];
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
{
int val = con.nextInt();
if (val == 1) m[i]++;
}
int res = 0;
for(int i = 0; i < n; i++)
if (m[i] == 1) res++;
System.out.println(res);
con.close();
}
}