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 ≤ 1001 ≤ 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;
}