fbpx

Problema #1551 – DSLM – Rezolvari PBInfo

de Mihai-Alexandru

Cerința

Se dă mulțimea V a arcelor unui graf orientat cu n vârfuri.

Exemplu

dslm.in

12 2
1 2
2 3
3 1
1 4
6 4
4 5
5 7
7 5
8 9
9 8
10 11
11 12

dslm.out

2 3 1 4 5 7 5

Explicație

Graful conține un singur drum simplu de lungime maximă cu extremitatea inițială în vârful p=2, D=[2,3,1,4,5,7,5]

#include <bits/stdc++.h>
using namespace std;

ifstream cin("dslm.in");
ofstream cout("dslm.out");

int n , a[25][25] , x1 , y , x[25] , p[25] , P , kmax , re[101];

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

void rez(int k)
{
   for(int i = 1 ; i <= k ; i++)
        re[i] = x[i];
}

void back(int k)
{
    for(int i = 1 ; i <= n ; i++)
    {
        x[k] = i;
        if(a[x[k - 1]][x[k]] == 1)
        {
            a[x[k - 1]][x[k]] = 0;
            if(k > kmax) kmax = k , rez(k);
            back(k + 1);
            a[x[k - 1]][x[k]] = 1;
        }
    }
}

int main()
{
    cin >> n >> P;
    while(cin >> x1 >> y) a[x1][y] = 1;

    x[1] = P;
    p[P] = 1;
    back(2);

    for(int i = 1 ; i <= kmax ; i++)
        cout << re[i] << " ";
}
Comentarii

S-ar putea sa iti placa