fbpx

Problema #475 – Lant – Rezolvari PBInfo

de Mihai-Alexandru

Cerinţa

Se dă lista muchiilor unui graf neorientat cu n vârfuri și două vârfuri p q. Să se determine toate lanțurile elementare cu extremitățile p și q.

Date de intrare

Fişierul de intrare lant.in conţine pe prima linie numerele n și m, reprezentând numărul de vârfuri ale grafului și numărul de muchii date în continuare. Fiecare dintre următoarele m linii conține câte o pereche de numere i j, cu semnificația că există muchie între i și j.

Următoarea linie conține două numere p q.

Date de ieşire

Fişierul de ieşire lant.out va conține, în ordine lexicografică, toate lanțurile elementare cu extremitățile în p, respectiv q, fiecare lanț fiind afișat pe câte o linie a fișierului, vârfurile dintr-un lanț fiind separate prin exact un spațiu.

Restricţii şi precizări

  • 1 ≤ n ≤ 20
  • 1 ≤ i , j ≤n
  • muchiile se pot repeta în fișierul de intrare
  • 1 ≤ p , q ≤ n

Exemplu

lant.in

5 8
1 4 
1 3 
3 5 
4 5 
2 4 
1 2 
4 2 
3 4
2 5

lant.out

2 1 3 4 5 
2 1 3 5 
2 1 4 3 5 
2 1 4 5 
2 4 1 3 5 
2 4 3 5 
2 4 5 
#include <bits/stdc++.h>
using namespace std;

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

int n , m , x , y , a[21][21] , X[21] , P[21] , p , q;

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

void back(int k)
{
    for(int i = 1 ; i <= n ; i++)
        if(!P[i])
        {
            P[i] = 1;
            X[k] = i;
            if(k == 1 || a[X[k - 1]][X[k]] == 1)
            {
                if(X[k] == q) afisare(k);
                else back(k + 1);
            }
            P[i] = 0;

        }
}

int main()
{
    cin >> n >> m;
    for(int i = 1 ; i <= m ; i++)
    {
        cin >> x >> y;
        a[x][y] = a[y][x] = 1;
    }

    cin >> p >> q;

    P[p] = 1 , X[1] = p;
    back(2);
    return 0;
}
Comentarii

S-ar putea sa iti placa