Cod sursa(job #833076)

Utilizator adnionutCojocaru Ionut adnionut Data 11 decembrie 2012 21:13:23
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include<fstream>
#include<string.h>
using namespace std;
ifstream f("bfs.in");
ofstream g("bfs.out");
struct nod
{
    int inf;
    nod *adr;
}*l[100100];
int k,n,m,x,y,tail[100100],d[100100],rank[100100];
bool viz[100100];
void create (int a,int b)
{
    nod *c=new nod;
    c->adr=l[a];
    c->inf=b;
    l[a]=c;
}
void bfs()
{
    nod *c;
    bool OK;
    int p,u,i;
    for(int i=1;i<=n;++i)
        d[i]=-1;
    i=k;
    d[i]=0;
        c=l[i];
        tail[1]=i;
        rank[1]=0;
        p=u=1;
        while(p<=u)
        {
            c=l[tail[p]];
            while(c!=NULL)
            {
                if(viz[c->inf]==0)
                {
                    viz[c->inf]=1;
                    tail[++u]=c->inf;
                    rank[u]=rank[p]+1;
                    d[c->inf]=rank[u];
                }
                c=c->adr;
            }
            p++;
        }
    d[k]=0;
    for(i=1;i<=n;++i)
        g<<d[i]<<" ";
}
int main ()
{
    f>>n>>m>>k;
    for(int i=1;i<=m;++i)
    {
        f>>x>>y;
        if(x!=y)
        create(x,y);
    }
    bfs();
    return 0;
}