Pagini recente » Cod sursa (job #2370315) | Cod sursa (job #430308) | Cod sursa (job #654182) | Cod sursa (job #872402) | Cod sursa (job #884608)
Cod sursa(job #884608)
#include <cstdio>
#include <queue>
#define MAXN 100010
#define inf 1<<30
#define FOR(i,a,b) for(i=a;i<=b;i++)
using namespace std;
struct graf
{
int nod;
graf *next;
};
graf *a[MAXN];
int n,m,s,d[MAXN];
bool inqueue[MAXN];
queue<int> h;
inline void read()
{
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
scanf("%d %d %d",&n,&m,&s);
int i;
FOR(i,1,m)
{
int x,y;
scanf("%d %d",&x,&y);
graf *q=new graf;
q->nod=y;
q->next=a[x];
a[x]=q;
}
}
inline void bfs(int start)
{
int i;
FOR(i,1,n)
{
d[i]=inf;
inqueue[i]=false;
}
h.push(start);
inqueue[start]=true;
d[start]=0;
while(!h.empty())
{
int min=h.front();
h.pop();
graf *q=a[min];
while(q)
{
if(inqueue[q->nod]==false)
{
h.push(q->nod);
inqueue[q->nod]=true;
d[q->nod]=d[min]+1;
}
q=q->next;
}
}
}
inline void print()
{
int i;
FOR(i,1,n)
{
if(d[i]==inf)
printf("-1 ");
else
printf("%d ",d[i]);
}
printf("\n");
}
int main()
{
read();
bfs(s);
print();
return 0;
}