Cod sursa(job #606109)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 3 august 2011 13:42:51
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include<fstream.h>
#define N 100001
typedef struct nod
{long v;
nod *leg;}Nod;
typedef struct
{Nod *pr,*ul;}co;

void add(long x,co &q)
{Nod *p=new Nod;
p->v=x;
p->leg=NULL;
if(!q.pr)
      q.pr=q.ul=p;
else
      q.ul->leg=p,q.ul=p;}

long del(co &q)
{Nod *t=q.pr->leg;
long x=q.pr->v;
free(q.pr);
q.pr=t;
if(!q.pr)
      q.ul=NULL;
return x;}

int main()
{long n,m,s,k,i,j,d[N],c[N],q[10*N],u,p;
co l[N];
ifstream f("bfs.in");
ofstream h("bfs.out");
f>>n>>m>>s;
for(i=1;i<=n;i++)
     d[i]=N,l[i].pr=l[i].ul=NULL;
for(k=1;k<=m;k++)
     f>>i>>j,add(j,l[i]);
c[s]=1,d[s]=0,q[u++]=s;
while(p<u)
     {i=q[p++];
     while(l[i].pr)
            {j=del(l[i]);
            if(!c[j])
                     d[j]=d[i]+1,c[j]=1,q[u++]=j;}}
for(i=1;i<=n;i++)
if(d[i]==N)
     h<<"-1 ";
else
     h<<d[i]<<" ";
return 0;}