Cod sursa(job #2194321)

Utilizator NaritaandreiCNAINarita Andrei NaritaandreiCNAI Data 12 aprilie 2018 20:47:52
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include <iostream>
#include <stdio.h>
#include <deque>
#include <bitset>
#define maxim 2000000000
using namespace std;
FILE *f,*g;
deque <int> coada;
bitset <1000002> fr;
int v[1000002],a[2][1000002], drum[1000002];
int m,n,s;
void citire()
{
    int k=1,i,j;
    fscanf(f, "%d %d %d", &n, &m, &s);
    for(int l=1; l<=m; l++)
    {
        fscanf(f, "%d %d", &i, &j);
        a[0][k]=j;
        a[1][k]=v[i];
        v[i]=k;
        k++;
    }
}
void afisare()
{   int i,x,ok,nr;
    for(i=1;i<=n;i++)
        drum[i]=maxim;
    coada.push_back(s);
    fr[s]=1;
    drum[s]=0;
    while(!coada.empty())
    {
        x=coada.front();
        ok=v[x];
        nr=drum[x];
        while(ok)
        {
            if(!fr[a[0][ok]] || nr+1<drum[a[0][ok]])
            {
                coada.push_back(a[0][ok]);
                drum[a[0][ok]]=nr+1;
                fr[a[0][ok]]=nr+1;
            }
            ok=a[1][ok];
        }
        coada.pop_front();
    }
    for(i=1;i<=n;i++)
        if(drum[i]!=maxim)
            fprintf(g,"%d ",drum[i]);
        else
            fprintf(g,"-1 ");
}
int main()
{
    f=fopen("bfs.in","r");
    g=fopen("bfs.out","w");
    citire();
    afisare();
    fclose(f);
    fclose(g);
    return 0;
}