Міста та дороги#992

Міста та дороги (Розбір)

Нехай — матриця суміжності графа. Оскільки граф неорієнтований, то у випадку наявності ребра між вершинами та маємо рівності:

g[i][j] = g[j][i] = 1

Кількість ребер у графі дорівнює кількості одиниць у матриці суміжності, поділеній на .

Приклад

Граф, наведений у прикладі, має вигляд:

Кількість доріг на планеті дорівнює .

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

Читаємо вхідне значення .

scanf("%d",&n);

Читаємо матрицю суміжності. Обчислюємо суму чисел у ній. Оскільки граф неорієнтований, то дорівнює подвоєній кількості ребер.

res = 0;
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
{
  scanf("%d",&val);
  res += val;
}

Обчислюємо та виводимо кількість ребер.

res /= 2;
printf("%d\n",res);

Java реалізація

import java.util.*;

public class Main
{
  public static void main(String[] args)
  {
    Scanner con = new Scanner(System.in);
    int n = con.nextInt();

    int res = 0;
    for(int i = 0; i < n; i++)
    for(int j = 0; j < n; j++)
      res += con.nextInt();

    res /= 2;
    System.out.println(res);
    con.close();
  }
}

Python реалізація — на льоту

Читаємо вхідне значення .

n = int(input())

Суму чисел у матриці суміжності обчислюємо у змінній .

res = 0

Читаємо матрицю суміжності рядок за рядком. Для кожного рядка обчислюємо суму чисел у ньому. Потім додаємо цю суму до значення .

for _ in range(n):
  res += sum(map(int, input().split()))

Оскільки граф неорієнтований, то сума дорівнює подвоєній кількості ребер. Ділимо на та виводимо відповідь.

res //= 2
print(res)

Python реалізація — матриця суміжності

Читаємо вхідні дані.

n = int(input()) 
g = [[int(j) for j in input().split()] for i in range(n)]

Обчислюємо суму чисел у матриці суміжності. Оскільки граф неорієнтований, то дорівнює подвоєній кількості ребер.

s = 0
for row in g:
  s += sum(row)

Виводимо кількість ребер.

print(s // 2)