Степені вершин#4764

Степені вершин (Розбір)

Объявімо лінійний масив . У комірці будемо зберігати ступінь вершини , яка дорівнює кількості одиниць у -му рядку матриці суміжності.

У неорієнтованому графі кожне ребро враховується двічі: якщо — матриця суміжності та між вершинами та є ребро, то m[i][j] = m[j][i] = 1). Для кожного ребра збільшуємо на (коли зустрінеться ребро , то deg[j] збільшиться на ).

Приклад

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

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

Объявімо масив для зберігання ступенів вершин.

#define MAX 101
int deg[MAX];

Читаємо кількість вершин графа . Ініціалізуємо масив .

scanf("%d",&n);
memset(deg,0,sizeof(deg));

Читаємо матрицю суміжності.

for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
{

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

  scanf("%d",&value);
  if (value == 1) deg[i]++;
}

Виводимо ступені всіх вершин графа.

for(i = 0; i < n; i++)
  printf("%d\n",deg[i]);

Java реалізація

import java.util.*;

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

    int n = con.nextInt();
    int deg[] = new int[n];
    
    for(int i = 0; i < n; i++)
    for(int j = 0; j < n; j++)
    {
      int value = con.nextInt();
      if (value == 1) deg[i]++;
    }

    for(int i = 0; i < n; i++)
      System.out.println(deg[i]);      
    con.close();
  }
}   

Python реалізація

Читаємо кількість вершин графа .

n = int(input())

Ініціалізуємо матрицю суміжності та список ступенів вершин .

g = [[] for _ in range(n)]
deg = [0] * n

Читаємо матрицю суміжності.

for i in range(n):
  g[i] = list(map(int, input().split()))

Виконуємо обчислення ступенів вершин графа. Ступінь вершини дорівнює сумі елементів -го рядка матриці суміжності .

for i in range(n):
  deg[i] = sum(g[i])

Виводимо ступені всіх вершин графа.

for i in range(n):
  print(deg[i])