# PBinfo #582 – Turneu – Rezolvare C++

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

## Enunț

Un graf orientat se numește graf turneu dacă oricare ar fi două noduri diferite i, j, între ele există un singur arc: arcul (i j) sau arcul (j i). În orice graf turneu există un drum elementar care trece prin toate nodurile grafului.

Cerința
Se dă un graf turneu cu n noduri. Să se determine un drum elementar care să conțină toate nodurile grafului.

Date de intrare
Programul citește de la tastatură numărul de noduri n, iar apoi n*(n-1)/2 perechi i j, cu semnificația că există arcul (i j).

Date de ieșire
Programul va afișa pe ecran cele n noduri ale drumului determinat, separate prin exact un spațiu.

Restricții și precizări

1 ≤ n ≤ 100
orice drum corect determinat este acceptat

Exemplu:
Intrare

4
1 4
2 1
2 4
3 1
3 2
4 3
Ieșire

1 4 3 2

## Cod sursă C++

```cpp
#include <iostream>
#include <fstream>
using namespace std;
int n , a[105][105], x[105];
int main()
{
    int i , j , m;
    cin >> n;
    m = n * (n - 1) / 2;
    while( m )
    {
    	cin >> i >> j;
    	a[i][j] = 1;
    	m --;
    }
	m = 2;
	if(a[1][2] == 1)
		x[1] = 1, x[2] = 2;
	else
		x[1] = 2, x[2] = 1;
	for(int i = 3 ; i <= n ; ++i)
	{
		int p = 0;
		if(a[x[m]][i] == 1)
			p = m + 1;
		else
			if(a[i][x[1]] == 1)
				p = 1;
			else
				for(int j = 1 ; j < m && p == 0 ; ++j)
					if(a[x[j]][i] == 1 && a[i][x[j+1]] == 1)
						p = j + 1;
		for(int j = m ; j >= p ; --j)
			x[j+1] = x[j];
		x[p] = i;
		m ++;
	}
	for(int i = 1; i <= n ; ++i)
		cout << x[i] << " ";
	cout << "\n";
    return 0;
}
```

## Resurse

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