Cod sursa(job #386834)

Utilizator PopaStefanPopa Stefan PopaStefan Data 26 ianuarie 2010 10:22:55
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include<fstream>
#define nmax 100001

using namespace std;

ifstream fin("bfs.in");
ofstream fout("bfs.out");

int n,s;
int coada[nmax],viz[nmax];

struct nod
  {int inf;
   struct nod *urm;
  };
nod *l[nmax];

void citire()
{int i,m,x,y;
fin>>n>>m>>s;
for(i=1;i<=m;i++)
  {fin>>x>>y;
  nod *nou;
  nou=new nod;
  nou->inf=y;
  nou->urm=l[x];
  l[x]=nou;
  }
}

void bfs()
{int p,u,aux;
p=u=1;
coada[p]=s;
viz[s]=1;
while(p<=u)
  {aux=coada[p];
   p++;
   for(nod *c=l[aux];c!=NULL;c=c->urm)
     if(viz[c->inf]==0)
        {u++;
         coada[u]=c->inf;
         viz[c->inf]=viz[aux]+1;
        }
  }
for(p=1;p<=n;p++)
  if(viz[p]!=0) fout<<viz[p]-1<<' ';
    else if(viz[p]==0) fout<<"-1 ";
}

int main()
{citire();
bfs();
fin.close();
fout.close();
return 0;
}