Pagini recente » Cod sursa (job #1697957) | Cod sursa (job #1894629) | Cod sursa (job #1033133) | Cod sursa (job #2849631) | Cod sursa (job #2828157)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("bfs.in");
ofstream g("bfs.out");
int n,m,c,b,s;
int viz[100001],T[2][400001],Start[100001],C[100000],sol[1000001];
void bf(int nodstart)
{
int ps=1,pi=1,man,nrarce=1;
viz[nodstart]=1;
C[ps]=nodstart;
while(ps<=pi)
{
man=Start[C[ps]];
while(man)
{
if(viz[T[0][man]]==0)
{
viz[T[0][man]]=1;///vizitez nodul
sol[T[0][man]]=nrarce;///numarul de arce care trebuie parcurse pentru a ajunge in nodul s din nodul T[0][man]
C[++pi]=T[0][man];///adaug nodul in coada
}
man=T[1][man];///trec la un nod adiacent
}
nrarce++;///nu am ajuns inca la nodul s, deci mai parcurg un arc
ps++;
}
}
int main()
{
int k=0;
f>>n>>m>>s;
for(int i=1;i<=m;i++)
{
f>>c>>b;
k++;
T[0][k]=b;
T[1][k]=Start[c];
Start[c]=k;
}
bf(s);
for(int i=1;i<=n;i++)
if(viz[i]==0)
g<<"-1 ";
else
g<<sol[i]<<" ";
return 0;
}