# PBinfo #466 – GenGraf – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: andrei

## Enunț

Cerinţa
Se dă un număr natural n. Construiți toate grafurile neorientate cu n vârfuri.

Date de intrare
Fişierul de intrare gengraf.in conţine pe prima linie numărul n.

Date de ieşire
Fişierul de ieşire gengraf.out va conţine pe prima linie numărul de grafuri generate M; urmează M matrice de adiacență ale acestor grafuri.

Fiecare matrice va fi afișată astfel: câte o linie a matricei pe o linie a fișierului, elementele de pe o linie fiind separate prin exact un spațiu. După fiecare matrice afișată se va găsi în fișier o linie goală.

Restricţii şi precizări

2 ≤ n ≤ 6
cele M matrice de adiacență construite pot fi afișate în orice ordine

Exemplu:
gengraf.in

3
gengraf.out

8
0 0 0 
0 0 0 
0 0 0 

0 0 0 
0 0 1 
0 1 0 

0 0 1 
0 0 0 
1 0 0 

0 0 1 
0 0 1 
1 1 0 

0 1 0 
1 0 0 
0 0 0 

0 1 0 
1 0 1 
0 1 0 

0 1 1 
1 0 0 
1 0 0 

0 1 1 
1 0 1 
1 1 0

## Cod sursă C++

```cpp
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("gengraf.in");
ofstream fout("gengraf.out");
int a[10][10], x[100], n , m;
void afis()
{
	for(int i=1, k = 1; i <= n ; i ++)
		for(int j = i + 1 ; j <= n ; ++j)
		{
			a[i][j] = a[j][i] = x[k];
			k ++;
		}
	for(int i = 1; i <= n ;++i)
	{
		for(int j = 1 ; j <= n ; ++j)
			fout << a[i][j] << " ";
		fout << "\n";
	}
	fout << "\n";
}
void back(int k)
{
	for(int i= 0 ; i <= 1 ; ++i)
	{
		x[k] = i;
		if(k == m)
			afis();
		else
			back(k+1);
	}
}
int main()
{
	fin >> n;
	m = n*(n-1) / 2;
	int p = 1;
	for(int i = 1 ; i <= m ; ++i)
		p *= 2;
	fout << p << "\n";
	back(1);
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/466)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/466/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-466/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
