Cod sursa(job #1121176)

Utilizator bia423Bianca Floriana bia423 Data 25 februarie 2014 11:53:27
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <iostream>
#include <fstream>
using namespace std;
const int inf=1<<30;
const int mmax=1000001;
const int nmax=100001;
ifstream in("bfs.in");
ofstream out("bfs.out");
struct lista
{   int v;
   lista * urm;
};
lista *cap[nmax],*nou;
int coada[mmax],n,m,ns,d[nmax];
void bfs()
{ int pi=1,ps=1,i;
for(i=1;i<=n;i++)
    d[i]=inf;
    coada[ps]=ns;
    d[ns]=0;
    while(pi<=ps)
    { nou=cap[coada[pi]];
            while(nou!=NULL)
            {if(d[nou->v]>d[coada[pi]]+1){d[nou->v]=d[coada[pi]]+1;ps++;coada[ps]=nou->v;}

                nou=nou->urm;
            }
         pi++;

    }

}



int main()
{ in>>n>>m>>ns;
int i,a,b;
    for(i=1;i<=m;i++)
    { in>>a>>b;
        nou=new lista;
        nou->v=b;
        nou->urm=cap[a];
        cap[a]=nou;
    }
  /* for(i=1;i<=n;i++)
       {        out<<i<<" ";
        nou=cap[i];
        while(nou!=NULL)
            {out<<nou->v<<" ";
        nou=nou->urm;}out<<"\n";}*/
        bfs();
        for(i=1;i<=n;i++)
            if(d[i]==inf)
            out<<"-1 ";
                else out<<d[i]<<" ";
    return 0;
}