Pagini recente » Cod sursa (job #1539875) | Cod sursa (job #73279) | Cod sursa (job #2229434) | Cod sursa (job #738114) | Cod sursa (job #493937)
Cod sursa(job #493937)
#include<cstdio>
using namespace std;
struct NodLSI
{
int inf;
struct NodLSI* next;
} ;
typedef NodLSI* LSI;
LSI NS[100001];
int N,M,S,viz[100001],C[100001],p,u;
void adaug(int x,int y);
void read();
void write();
void solve();
int main()
{
freopen ("bfs.in","r",stdin);
freopen ("bfs.out","w",stdout);
read();
solve();
write();
return 0;
}
void read()
{
int i,x,y;
scanf("%ld%ld%ld",&N,&M,&S);
for (i=1;i<=M;++i)
{
scanf("%ld%ld",&x,&y);
adaug(x,y);
}
}
void adaug(int x,int y)
{
LSI p=new NodLSI;
p->inf=y;
p->next=NS[x];
NS[x]=p;
}
void solve()
{
LSI i;
int z;
p=u=1;
C[p]=S;
while (p<=u)
{
z=C[p++];
for (i=NS[z];i;i=i->next)
if (!viz[i->inf]&&i->inf!=S&&i->inf!=z)
{
C[++u]=i->inf;
viz[i->inf]=viz[z]+1;
}
}
}
void write()
{
int i;
for (i=1;i<=N;++i)
if (viz[i]==0&&i!=S) printf("%ld ",-1);
else printf("%ld ",viz[i]);
}