fbpx

Problema #422 – Graf – Rezolvari PBInfo

de Mihai-Alexandru

Cerinţa

Se dă lista muchiilor unui graf neorientat cu n vârfuri, etichetate de la 1 la n. Din acest graf se elimină toate muchiile cu o extremitate într-un vârf de grad maxim. Să se determine numărul de muchii eliminate și să se afișeze matricea de adiacență a grafului parțial obținut.

Date de intrare

Fişierul de intrare graf_partial_2.in conţine pe prima linie numărul n, reprezentând numărul de vârfuri ale grafului. Fiecare dintre următoarele linii conține câte o pereche de numere i j, cu semnificația că există muchie între i și j.

Date de ieşire

Fişierul de ieşire graf_partial_2.out va conţine pe prime linie numărul de muchii eliminate, iar pe următoarele linii matricea de adiacență a grafului parțial obținut, câte o linie a matricei pe o linie a fișierului, elementele de pe fiecare linie fiind separate prin exact un spațiu.

Restricţii şi precizări

  • 1 ≤ n ≤ 100
  • 1 ≤ i , j ≤ n
  • muchiile se pot repeta în fișierul de intrare

Exemplu

graf_partial_2.in

6
1 2
6 2
2 3
4 3
5 3
4 5
3 6
6 4

graf_partial_2.out

4
0 1 0 0 0 0 
1 0 0 0 0 1 
0 0 0 0 0 0 
0 0 0 0 1 1 
0 0 0 1 0 0 
0 1 0 1 0 0 

Explicație

Se elimină muchiile (2 3), (4 3), (5 3), (3 6).

#include <bits/stdc++.h>
using namespace std;
ifstream fin ("graf_partial_2.in");
ofstream fout ("graf_partial_2.out");
int a[101][101], n, x, y, mx, nr, m, mn = 1000000000;
int main()
{
    fin >> n;
    while(fin >> x >> y)
    {
        if (a[x][y] == 0)
        {
            a[x][0]++;
            a[y][0]++;
        }
        a[x][y] = 1;
        a[y][x] = 1;
        mx = max(mx, max(a[x][0], a[y][0]));
    }
    m = 0;
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= n; j++)
        {
            if ((a[i][0] == mx || a[j][0] == mx)&&(a[i][j] == 1))
            {
                m++;
                a[i][j] = 0;
                a[j][i] = 0;
            }
        }
    }
    fout << m << endl;
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= n; j++)fout << a[i][j] << ' ';
        fout << endl;
    }
    return 0;
}
Comentarii

S-ar putea sa iti placa