Cod sursa(job #384913)

Utilizator PopaStefanPopa Stefan PopaStefan Data 21 ianuarie 2010 19:27:00
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include<fstream>
#define nmax 100001

using namespace std;

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

int n,m,v;
int coada[nmax],viz[nmax];

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

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

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

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