Cod sursa(job #2316853)

Utilizator Username01Name Surname Username01 Data 12 ianuarie 2019 15:21:51
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.22 kb
#include <cstdio>
#include <deque>

using namespace std;
FILE *f,*g;

int start[100002], t[2][1000002];
bool viz[100002];
int v[100002],n;
deque <int> coada;

void bfs(int nod)
{
    int poz,vecin;
    coada.push_back(nod);
    v[nod]=0;
    viz[nod]=1;
    while(!coada.empty())
    {
        nod=coada.front();
        coada.pop_front();
        poz=start[nod];
        while(poz)
        {
            vecin=t[0][poz];
            if(v[nod]+1<v[vecin])
            {
                v[vecin]=v[nod]+1;
                if(viz[vecin]==0)
                    viz[vecin]=1,coada.push_back(vecin);
            }
            poz=t[1][poz];
        }
    }

}

int main()
{
    f=fopen("bfs.in","r");
    g=fopen("bfs.out","w");
    int m,Nod;
    fscanf(f,"%d %d %d",&n,&m,&Nod);
    int x,y,k=0;
    for(int i=1;i<=m;++i)
    {
        fscanf(f,"%d %d",&x,&y);
        t[0][++k]=y;
        t[1][k]=start[x];
        start[x]=k;
    }
    for(int i=1;i<=n;++i)
        v[i]=1999999999;
    bfs(Nod);
    for(int i=1;i<=n;++i)
    {
        if(v[i]==1999999999)
            fprintf(g,"-1 ");
        else
            fprintf(g,"%d ",v[i]);
    }
    fclose(f);
    fclose(g);
    return 0;
}