#539
Se consideră un graf neorientat cu n
vârfuri și m
muchii și de asemenea un vârf X
.
Cerinţa
Să se afișeze vârfurile vizitate în urma parcurgerii în adâncime (Depth First Search) a grafului, pornind din vârful X
.
Date de intrare
Fişierul de intrare dfs.in
conţine pe prima linie trei numere naturale n
, m
, X
, având următoarea semnificație: n
este numărul de noduri, m
este numărul de muchii din graf, iar X
este vârful din care se începe parcurgerea. Următoarele m
linii conțin câte două numere i j
cu semnificația că există muchie între i
și j
.
Date de ieşire
Fişierul de ieşire dfs.out
va conţine pe prima linie vârfurile vizitate în urma parcurgerii în adâncime a grafului, aceasta începând din vârful X
.
Restricţii şi precizări
2 <= n <= 100
1 <= m <= n*(n-1)/2
- dacă în timpul parcurgerii, la un moment dat vârful curent al grafului este
Y
, vecinii nevizitați ai luiY
se vor analiza în ordine crescătoare.
Exemplu
dfs.in
7 8 3 1 2 1 3 1 6 2 4 2 5 3 6 3 7 4 6
dfs.out
3 1 2 4 6 5 7
#include <iostream> #include <fstream> #include <cassert> using namespace std; ifstream fin("dfs.in"); ofstream fout("dfs.out"); int n , a[105][105], v[205]; void dfs(int X) { fout << X << " "; v[X] = 1; for(int i =1 ; i <= n ; ++i) if(a[X][i] == 1 && v[i] == 0) dfs(i); } int main() { int i , j , m, X; fin >> n >> m >> X; while(m > 0) { fin >> i >> j; a[i][j] = a[j][i] = 1; m --; } dfs(X); return 0; }