Pagini recente » Cod sursa (job #2145436) | Cod sursa (job #2034039) | Cod sursa (job #1427809) | Cod sursa (job #205686) | Cod sursa (job #627329)
Cod sursa(job #627329)
#include <cstdio>
#include <list>
using namespace std;
int n,m,s;
int c[100002],d[100002],v[100002];
list<int> l[100002];
list<int>::iterator itl;
void citire()
{
int x,y;
for(int i=1;i<=m;i++)
{
scanf("%d %d", &x, &y);
l[x].push_back(y);
}
}
void bfs(int s)
{
d[s]=0;
c[1]=s;
v[s]=1;
int p,u;
p=1;u=1;
while(p<=u)
{
for(itl=l[c[p]].begin();itl!=l[c[p]].end();++itl)
if(v[*itl]==0)
{
u++;
c[u]=*itl;
v[*itl]=1;
d[*itl]=d[c[p]]+1;
}
p++;
}
for(int i=1;i<=n;i++)
if(d[i]==0 && i!=s)
d[i]=-1;
}
void afisare()
{
/*for(int i=1;i<=n;i++)
{
printf("%d: ", i);
for(itl=l[i].begin();itl!=l[i].end();++itl)
printf("%d ",*itl);
printf("\n");
}*/
for(int i=1;i<=n;i++)
printf("%d ",d[i]);
printf("\n");
}
int main()
{
freopen("bfs.in","rt",stdin);
freopen("bfs.out","wt",stdout);
scanf("%d %d %d", &n, &m, &s);
citire();
bfs(s);
afisare();
return 0;
}