Pagini recente » Cod sursa (job #1626215) | Cod sursa (job #2478576) | Cod sursa (job #557103) | Cod sursa (job #2802554) | Cod sursa (job #950427)
Cod sursa(job #950427)
#include<stdio.h>
#include<vector>
using namespace std;
int N,M,S,x,y,v[100100],fringe[100100],first=1,last=1;
vector <int> a[100100];
int main()
{
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
scanf("%d%d%d",&N,&M,&S);
for(int i=1;i<=M;++i)
{
scanf("%d%d",&x,&y);
a[x].push_back(y);
}
for(int i=1;i<=N;++i)
v[i]=-1;
fringe[first]=S;
v[S]=0;
while(first<=last)
{
int x=a[fringe[first]].size();
for(int i=0;i<x;++i)
{
if(v[a[fringe[first]][i]]==-1 || v[a[fringe[first]][i]]>v[fringe[first]]+1)
{
++last;
fringe[last]=a[fringe[first]][i];
v[fringe[last]]=v[fringe[first]]+1;
}
}
++first;
}
for(int i=1;i<=N;++i)
printf("%d ",v[i]);
return 0;
}