#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 <= 1001 <= m <= n*(n-1)/2- dacă în timpul parcurgerii, la un moment dat vârful curent al grafului este
Y, vecinii nevizitați ai luiYse 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;
}