Pagini recente » Cod sursa (job #442262) | Cod sursa (job #2333584) | Cod sursa (job #228606) | Cod sursa (job #1904721) | Cod sursa (job #628903)
Cod sursa(job #628903)
#include<stdio.h>
#include<vector>
#include<queue>
using namespace std;
vector<long> v[100002];
queue<long> c;
long i, n, s, m, u, x, y;
int viz[100002], tata[100002], d[100002];
void parc(long s)
{
for (i=1; i<=n; i++)
{
viz[i]=0; tata[i]=0; d[i]=-1;
}
c.push(s);
d[s]=0; viz[s]=1;
while (c.size()>0)
{
u=c.front();
c.pop();
for (i=0; i<v[u].size(); i++)
{
x=v[u][i];
if (viz[x]==0)
{
c.push(x); viz[x]=1;
tata[x]=u;
d[x]=d[u]+1;
}
}
}
}
/*void drum (long s, long x)
{
if (s==x) printf("%ld ", s);
else
if (tata[x]!=0)
{
drum(s, tata[x]);
printf("%ld", x);
}
else printf("%ld ", -1);
}*/
int main()
{
freopen("bfs.in", "r", stdin);
freopen("bfs.out", "w", stdout);
scanf("%ld %ld %ld", &n, &m, &s);
for (i=1; i<=m; i++)
{
scanf("%ld %ld", &x, &y);
v[x].push_back(y);
}
parc(s);
for (i=1; i<=n; i++)
printf("%ld ", d[i]);
return 0;
}