Pagini recente » Cod sursa (job #66324) | Cod sursa (job #1985907) | Cod sursa (job #2266222) | Cod sursa (job #501388) | Cod sursa (job #514666)
Cod sursa(job #514666)
#include<stdio.h>
#include<stdlib.h>
#define N 100001
typedef struct nod
{long val;
struct nod *leg;}Nod;
typedef struct
{Nod *prim,*ultim;}coada;
void add(long x,coada &q)
{Nod *px=new Nod;
px->val=x;
px->leg=NULL;
if(q.prim==NULL)
q.prim=q.ultim=px;
else
{q.ultim->leg=px;
q.ultim=px;}}
long del(coada &q)
{Nod *t=q.prim->leg;
long x=q.prim->val;
free(q.prim);
q.prim=t;
if(q.prim==NULL)
q.ultim=NULL;
return x;}
int main()
{long n,m,s,k,i,j,dist[N],c[N];
coada q,l[N];
q.prim=q.ultim=NULL;
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
scanf("%ld%ld%ld",&n,&m,&s);
for(i=1;i<=n;i++)
{dist[i]=N;
c[i]=0;
l[i].prim=l[i].ultim=NULL;}
for(k=1;k<=m;k++)
{scanf("%ld%ld",&i,&j);
add(j,l[i]);}
c[s]=1;
dist[s]=0;
add(s,q);
while(q.prim!=NULL)
{i=del(q);
while(l[i].prim!=NULL)
{j=del(l[i]);
if(c[j]==0)
{dist[j]=dist[i]+1;
c[j]=1;
add(j,q);}}}
for(i=1;i<=n;i++)
if(dist[i]==N)
printf("-1 ");
else
printf("%ld ",dist[i]);
fclose(stdin);
fclose(stdout);
return 0;}