Cerinţa
Se consideră două mulţimi nevide A
şi B
, cu proprietatea că formează o partiție a mulțimii {1,2,...,n}.
Să se construiască un graf bipartit complet cu n
vârfuri, bipartit peste partiţia formată din mulțimile A
și B
.
Date de intrare
Fişierul de intrare bipartitcomplet.in
conţine pe prima linie numărul n
. Urmează un număr k
, apoi k
numere naturale distincte cuprinse între 1
și n
, reprezentând vârfurile din A
. Mulțimea B
conține toate numerele naturale cuprinse între 1
și n
care nu sunt în A
.
Date de ieşire
Fişierul de ieşire bipartitcomplet.out
va conţine matricea de adiacență a grafului construit, câte o linie a matricei pe o linie a fișierului, elementele de pe o linie fiind separate prin exact un spațiu.
Restricţii şi precizări
1 < k < n ≤ 100
Exemplu
bipartitcomplet.in
7 3 4 6 3
bipartitcomplet.out
0 0 1 1 0 1 0 0 0 1 1 0 1 0 1 1 0 0 1 0 1 1 1 0 0 1 0 1 0 0 1 1 0 1 0 1 1 0 0 1 0 1 0 0 1 1 0 1 0
#include <bits/stdc++.h> using namespace std; ifstream fin ("bipartitcomplet.in"); ofstream fout ("bipartitcomplet.out"); int a[101][101], n, m , x, y, k , v[2500]; int main() { fin >> n; fin >> k; for(int i = 1 ; i <= k ; ++i) fin >> v[i]; for(int i = 1 ; i <= n ; i++) { for(int j = 1 ; j <= n ; ++j) { for(int p = 1 ; p <= k ; ++p) { if(i == v[p]) { if(a[i][j] == 0) a[i][j] = 1; } } } } for(int j = 1 ; j <= n ; j++) { for(int i = 1 ; i <= n ; ++i) { for(int p = 1 ; p <= k ; ++p) { if(j == v[p]) { if(a[i][j] == 1) a[i][j] = 0; else a[i][j] = 1; } } } } for(int i = 1 ; i <= n ; ++i) { for(int j= 1 ; j <= n ; ++j) fout << a[i][j] << " "; fout << endl; } return 0; }