Rezolvare completă PbInfo #422 Graf Partial 2

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).

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema Graf Partial 2:

#include <iostream>
#include <fstream>
#include <cassert>
using namespace std;

ifstream fin("graf_partial_2.in");
ofstream fout("graf_partial_2.out");

int n , a[105][105], g[105];

int main()
{
    int i , j;
    fin >> n;
    while(fin >> i >> j)
    {
        a[i][j] = a[j][i] = 1;
    }
    
    int gmax = -1;
    
    for(int i = 1 ; i <= n ; ++i)
    {
        g[i] = 0;
        for(int j = 1 ; j <= n ; j++)
            if(a[i][j] == 1)
                g[i] ++;
        if(g[i] > gmax)
            gmax = g[i];
    }
    int melim = 0;
    for(int i=1;i<=n;++i)
        if(g[i] == gmax)
            for(int j = 1 ; j <= n ; ++j)
                    if(a[i][j] == 1)
                        melim ++, a[i][j] = a[j][i] = 0;
    
    
    fout << melim << "
";
    for(int i = 1 ; i <= n ; ++i)
    {
        for(int j = 1 ; j <= n ; j++)
            fout << a[i][j] <<" ";
        fout << "
";
    }

    return 0;
}

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #422 Graf Partial 2

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #422 Graf Partial 2 de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!