Pagini recente » Cod sursa (job #45399) | Cod sursa (job #1651236)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
vector <vector <int> > graf;
int n,m,X;
bool vizitat[100];
ofstream g("bfs.out");
void Citire()
{
ifstream f("bfs.in");
f>>n>>m>>X;
if (n<2||n>100000||m<1||m>1000000)
return;
graf.resize(n);
for (int i=0;i<m;i++)
{
int x,y;
f>>x>>y;
if (x!=y)
{
x--;
y--;
graf[x].push_back(y);
}
}
}
void ResetViz ()
{
for (int i=0;i<n;i++)
vizitat[i]=false;
}
void BFS(int x)
{
int element;
queue <int> coada;
coada.push(x);
vector <int> nrpasi;
vizitat[x]=true;
nrpasi.resize(n, 0);
while (!coada.empty())
{
element=coada.front();
for (unsigned int i=0;i<graf[element].size();i++)
{
if (vizitat[graf[element][i]]==false)
{
vizitat[graf[element][i]]=true;
nrpasi[graf[element][i]]=nrpasi[element]+1;
coada.push(graf[element][i]);
}
}
coada.pop();
}
for (int i=0;i<n;i++)
if (vizitat[i]==false)
nrpasi[i]=-1;
for (int i=0;i<n;i++)
{
g<<nrpasi[i]<<" ";
cout<<nrpasi[i]<<" ";
}
}
int main ()
{
Citire();
BFS(X-1);
g.close();
return 0;
}