Şəhərlər və yollar#992

Şəhərlər və yollar (Həll təhlili)

Tutaq ki, — qrafın qonşuluq matrisidir. Qraf istiqamətləndirilməmiş olduğundan, və təpələri arasında tərəf olduqda aşağıdakı bərabərliklər doğrudur:

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

Qrafdakı tərəflərin sayı qonşuluq matrisindəki vahidlərin sayının -yə bölünməsinə bərabərdir.

Misal

Misalda verilmiş qraf aşağıdakı kimidir:

Planetdəki yolların sayı -ə bərabərdir.

Alqoritmin realizasiyası

giriş qiymətini oxuyuruq.

scanf("%d",\&n);

Qonşuluq matrisini oxuyuruq. Ondakı ədədlərin cəmini hesablayırıq. Qraf istiqamətləndirilməmiş olduğundan, tərəflərin sayının ikiqat böyüklüyünə bərabərdir.

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

Tərəflərin sayını hesablayıb çıxarırıq.

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

Java realizasiyası

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 realizasiyası — gedişat zamanı

giriş qiymətini oxuyuruq.

n = int(input())

Qonşuluq matrisindəki ədədlərin cəmini dəyişənində hesablayırıq.

res = 0

Qonşuluq matrisini sətir-sətir oxuyuruq. Hər sətir üçün ondakı ədədlərin cəmini hesablayırıq. Sonra bu cəmi qiymətinə əlavə edirik.

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

Qraf istiqamətləndirilməmiş olduğundan, cəmi tərəflərin sayının ikiqat böyüklüyünə bərabərdir. -i -yə bölüb cavabı çıxarırıq.

res //= 2
print(res)

Python realizasiyası — qonşuluq matrisi

Giriş məlumatlarını oxuyuruq.

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

Qonşuluq matrisindəki ədədlərin cəmini hesablayırıq. Qraf istiqamətləndirilməmiş olduğundan, tərəflərin sayının ikiqat böyüklüyünə bərabərdir.

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

Tərəflərin sayını çıxarırıq.

print(s // 2)