Cod sursa(job #1906648)

Utilizator andreizaicescuAndrei Zaicescu andreizaicescu Data 6 martie 2017 15:34:32
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <fstream>

using namespace std;
ifstream f("bfs.in");
ofstream g("bfs.out");
struct el{int nod; int urm;};
el a[1000001];
struct parc{int nod; int poz;};
parc v[100001];
int l[100001],n,m,i,j,k,nd,viz[100001],x,y,s;
void ad(int x, int y)
{
    k++;
    a[k].nod=y;
    a[k].urm=l[x];
    l[x]=k;
}
void parc(int nod)
{
    viz[nod]=1;
    v[1].nod=nod;
    v[1].poz=0;
    int in=1,sf=1;
    while(in<=sf)
    {
        int poz=l[v[in].nod];
        while(poz)
        {
            if(viz[a[poz].nod]==0)
            {
                sf++;
                v[sf].nod=a[poz].nod;
                v[sf].poz=v[in].poz+1;
                viz[a[poz].nod]=1;
            }
            poz=a[poz].urm;
        }
        in++;
    }
    for(i=1;i<=sf;i++)
        viz[v[i].nod]=v[i].poz;
    viz[nod]=0;
    for(i=1;i<nod;i++)
        if(viz[i]!=0)
        g<<viz[i]<<" ";
    else
        g<<-1<<" ";
    g<<0<<" ";
    for(i=nod+1;i<=n;i++)
        if(viz[i]!=0)
        g<<viz[i]<<" ";
    else
        g<<"-1 ";
}
int main()
{
    f>>n>>m>>s;
    for(i=1;i<=m;i++)
    {
        f>>x>>y;
        ad(x,y);
    }
    parc(s);
    return 0;
}