Cod sursa(job #2197859)

Utilizator BogdanAlexandruBogdan-Alexandru Dig BogdanAlexandru Data 22 aprilie 2018 23:06:10
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <stdio.h>
#include <climits>
#include <queue>
using namespace std;
FILE *f,*g;
queue <int> coada;
int start[100010],t[2][1000010],drm[100010];
void BFS(int s)
{
    drm[s]=1;
    int nod,vecin,poz,i;
    coada.push(s);
    while(!coada.empty())
    {
        nod=coada.front();
        coada.pop();
        poz=start[nod];
        while(poz)
        {
            if(drm[t[1][poz]]>drm[nod]+1)
                drm[t[1][poz]]=drm[nod]+1,coada.push(t[1][poz]);
            poz=t[0][poz];
        }
    }
}
void Afisare(int n)
{
    int i;
    for(i=1;i<=n;i++)
        if(drm[i]==INT_MAX)
            fprintf(g,"-1 ");
        else
            fprintf(g,"%d ",drm[i]-1);
}
int main()
{
    f=fopen("bfs.in","r");
    g=fopen("bfs.out","w");
    int n,m,s,i,x,y;
    fscanf(f,"%d %d %d\n",&n,&m,&s);
    for(i=1;i<=m;i++)
    {
        fscanf(f,"%d %d",&x,&y);
        t[1][i]=y;
        t[0][i]=start[x];
        start[x]=i;
    }
    for(i=1;i<=n;i++)
        drm[i]=INT_MAX;
    BFS(s);
    Afisare(n);
    fclose(f),fclose(g);
    return 0;
}