395
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 ≤ 201 ≤ 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