Cod sursa(job #514600)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 19 decembrie 2010 11:43:32
Problema BFS - Parcurgere in latime Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#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 init(coada &q)
{q.prim=q.ultim=NULL;}

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,a1[N],a2[N],dist[N]={N},c[N]={0};
coada q;
init(q);
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]);
dist[s]=0;
c[s]=1;
add(s,q);
while(q.prim!=NULL)
     {i=del(q);
     for(k=1;k<=m;k++)
     if(a1[k]==i&&c[a2[k]]==0)
              {dist[a2[k]]=dist[i]+1;
              c[a2[k]]=1;
              add(a2[k],q);}}
for(i=1;i<=n;i++)
if(dist[i]==N)
     printf("-1 ");
else
     printf("%ld ",dist[i]);
fclose(stdin);
fclose(stdout);
return 0;}