Cod sursa(job #683113)

Utilizator flaviusc11Fl. C. flaviusc11 Data 19 februarie 2012 23:36:24
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include<cstdio>
#define nmax 100010
using namespace std;
int n,m,s;
struct noduri {int nod; noduri *next;} *lista[nmax];
int v[nmax];
void citire()
{
    int i,x,y;
    freopen("bfs.in","r",stdin);
    scanf("%d%d%d",&n,&m,&s );
    for(i=1;i<=n;++i)
        v[i]=-1;
    for(i=1;i<=m;++i)
      {
          scanf("%d%d",&x,&y);
          noduri *q;
          q=new noduri;
          q->nod=y;
          q->next=lista[x];
          lista[x]=q;

      }
}
void bfs(int s)
{
    int i,coada[nmax];
    int p,u,ic,sf;
    v[s]=0;
    ic=sf=0;
    coada[ic]=s;
    noduri *q;
    while(ic<=sf)
    {
        q=lista[coada[ic]];
        while(q)
        {
            if(v[q->nod]==-1)
              sf++, coada[sf]=q->nod, v[q->nod]=v[coada[ic]]+1;
            q=q->next;
        }
        ic++;
    }

}

void afisare()
{
    freopen("bfs.out","w",stdout);
    int i;
    for(i=1;i<=n;++i)
      printf("%d ", v[i]);

}
int main()
{
    citire();
    bfs(s);
    afisare();
}