Cod sursa(job #2706916)

Utilizator Ilie_MityIlie Dumitru Ilie_Mity Data 16 februarie 2021 08:59:37
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
//Ilie Dumitru
#include<cstdio>
#include<queue>

struct nod
{
    int x;
    nod* next;
};

struct pereche
{
    int i, j;
};

int minim[100000], N, M, S;
nod *arce[100000];
char verif[12500];

inline void setbit(int i){verif[i>>3]|=1<<(i&7);}
inline char getbit(int i){return verif[i>>3]&(1<<(i&7));}

void add(int x, int y)
{
    nod *n=new nod;
    n->x=y;
    n->next=arce[x];
    arce[x]=n;
}

void BFS()
{
    std::queue<pereche> q;
    nod *n;
    pereche p;
    setbit(S);
    q.push({S, 0});
    while(!q.empty())
    {
        p=q.front();
        q.pop();
        minim[p.i]=p.j;
        for(n=arce[p.i];n;n=n->next)
            if(!getbit(n->x))
            {
                setbit(n->x);
                q.push({n->x, p.j+1});
            }
    }
}

int main()
{
    FILE *f=fopen("bfs.in", "r"), *g=fopen("bfs.out", "w");
    int i, a, b;
    fscanf(f, "%i", &N);
    fscanf(f, "%i", &M);
    fscanf(f, "%i", &S);
    --S;
    for(i=0;i<N;++i)
        minim[i]=-1;
    for(i=0;i<M;++i)
    {
        fscanf(f, "%i%i", &a, &b);
        add(a-1, b-1);
    }
    fclose(f);
    BFS();
    for(i=0;i<N;++i)
        fprintf(g, "%i ", minim[i]);
    fclose(g);
    return 0;
}