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 <bits/stdc++.h> using namespace std; ifstream cin("dfs.in"); ofstream cout("dfs.out"); int n , m , a[101][101] , x , y , P[101] , p; void dfs(int v) { cout << v << " "; P[v] = 1; for(int i = 1 ; i <= n ; i++) if(!P[i] && a[v][i] == 1) dfs(i); } int main() { cin >> n >> m >> p; for(int i = 1 ; i <= m ; i++) { cin >> x >> y; a[x][y] = a[y][x] = 1; } dfs(p); }