fbpx

Problema #582 – Turneu – Rezolvari PBInfo

de Mihai-Alexandru

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
#include <bits/stdc++.h>
using namespace std;

int n , a[101][101] , ok , x[101] , x1 , y , p[101];

void afisare()
{
    for(int i = 1 ; i <= n ; i++)
        cout << x[i] << " ";
    ok = 1;
}

void back(int k)
{
    for(int i = 1 ; i <= n && !ok; i++)
    if(!p[i])
    {
        x[k] = i;
        p[i] = 1;
        if(k == 1 || a[x[k - 1]][x[k]] == 1)
        {
            if(k == n) afisare();
            else back(k + 1);
        }
        p[i] = 0;
    }
}

int main()
{
    cin >> n;
    for(int i = 1 ; i <= n * (n - 1) / 2 ; i++)
    {
        cin >> x1 >> y;
        a[x1][y] = 1;
    }
    back(1);
}
Comentarii

S-ar putea sa iti placa