#19
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 lățime (Breadth First Search) a grafului, pornind din vârful X.
Date de intrare
Fişierul de intrare BFS.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 x y cu semnificația că există muchie între x și y .
Date de ieşire
Fişierul de ieşire BFS.out va conţine pe prima linie vârfurile vizitate în urma parcurgerii în lățime a grafului, aceasta începând din vârful X.
Restricţii şi precizări
2 <= n <= 1001 <= m <= n*(n-1)/2- Graful poate sa nu fie conex!!!
- 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
BFS.in
5 7 2 1 2 3 2 1 5 2 4 3 1 4 5 5 3
BFS.out
2 1 3 4 5
#include <bits/stdc++.h>
using namespace std;
ifstream fin("BFS.in");
ofstream fout("BFS.out");
int n,m,a[101][101],k,x[100],v[100];
int bfs(int start)
{
int i,k,st,dr;
st=dr=1;
x[1]=start;
v[start]=1;
while(st<=dr)
{
k=x[st];
for(i=1;i<=n;i++)
if(v[i]==0 && a[k][i]==1)
{
fout<<i<<" ";
v[i]=1;
x[++dr]=i;
}
st++;
}
}
int main()
{
int i,x,y;
fin>>n>>m;
fin>>k;
for(i=1;i<=m;i++)
{
fin>>x>>y;
a[x][y]=1;
a[y][x]=1;
}
fout<<k<<" ";
bfs(k);
return 0;
}