Pagini recente » Cod sursa (job #2383329) | Cod sursa (job #1065339) | Cod sursa (job #381048) | Cod sursa (job #1049104) | Cod sursa (job #628850)
Cod sursa(job #628850)
# include<stdio.h>
# include<vector>
using namespace std;
vector<int> v[100010];
int x,a[100010],u,p,d[100010],y,s,n,m,i,tata[100010];
bool viz[100010],ok;
int main()
{
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
scanf("%d %d %d\n",&n,&m,&s);
for (i=1; i<=m; i++)
{
scanf("%d %d\n",&x,&y);
if (x!=y)
v[x].push_back(y);
}
for (i=1; i<=n; i++)
{
viz[i]=false; tata[i]=0; d[i]=1000000;
}
a[1]=s;
viz[s]=true; d[s]=0;
u=1; p=1;
ok=true;
/*for (i=1; i<=n; i++)
{
for (vector<int> :: iterator it=v[i].begin(); it!=v[i].end(); it++)
printf("%d ",*it);
printf("\n");
}*/
while (ok)
{
x=a[p];
for (vector<int> :: iterator it=v[x].begin(); it!=v[x].end(); it++)
{
if (viz[*it]==false)
{
u++;
a[u]=*it;
viz[*it]=true;
tata[*it]=p; d[a[u]]=d[x]+1;
}
}
if (p==u) ok=false;
p++;
}
for (i=1; i<=n; i++)
if (d[i]!=1000000) printf("%d ",d[i]); else printf("-1 ");
return 0;
}