Pagini recente » Cod sursa (job #3279166) | Cod sursa (job #3270279) | Cod sursa (job #3245) | Cod sursa (job #3208877) | Cod sursa (job #514588)
Cod sursa(job #514588)
#include<stdio.h>
#include<stdlib.h>
#define N 100001
typedef struct nod
{long val;
struct nod *leg;}Nod;
typedef struct
{Nod *prim,*ultim;}coada;
coada *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;}
return q;}
coada *del(coada *q)
{if(q->prim==NULL)
return NULL;
Nod *t=q->prim->leg;
free(q->prim);
q->prim=t;
if(q->prim==NULL)
q->ultim=NULL;
return q;}
long top(coada *q)
{return q->prim->val;}
int main()
{long n,m,s,k,i,j,a1[N],a2[N],dist[N],c[N],p[N];
coada *q=new coada;
q->prim=q->ultim=NULL;
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
scanf("%ld%ld%ld",&n,&m,&s);
for(k=1;k<=m;k++)
scanf("%ld%ld",&a1[k],&a2[k]);
for(i=1;i<=n;i++)
{c[i]=0;
dist[i]=N;
p[i]=0;}
dist[s]=0;
c[s]=1;
q=add(s,q);
while(q->prim!=NULL)
{i=top(q);
for(k=1;k<=m;k++)
if(a1[k]==i&&c[a2[k]]==0)
{dist[a2[k]]=dist[i]+1;
p[a2[k]]=i;
c[a2[k]]=1;
q=add(a2[k],q);}
q=del(q);}
for(i=1;i<=n;i++)
if(dist[i]==N)
printf("-1 ");
else
printf("%ld ",dist[i]);
fclose(stdin);
fclose(stdout);
return 0;}