Cod sursa(job #2828157)

Utilizator Mada_MeraMadalina Mera Mada_Mera Data 6 ianuarie 2022 22:23:32
Problema BFS - Parcurgere in latime Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("bfs.in");
ofstream g("bfs.out");
int n,m,c,b,s;
int viz[100001],T[2][400001],Start[100001],C[100000],sol[1000001];
void bf(int nodstart)
{
    int ps=1,pi=1,man,nrarce=1;
    viz[nodstart]=1;
    C[ps]=nodstart;
    while(ps<=pi)
    {
        man=Start[C[ps]];
        while(man)
        {
            if(viz[T[0][man]]==0)
            {
                viz[T[0][man]]=1;///vizitez nodul
                sol[T[0][man]]=nrarce;///numarul de arce care trebuie parcurse pentru a ajunge in nodul s din nodul T[0][man]
                C[++pi]=T[0][man];///adaug nodul in coada
            }
            man=T[1][man];///trec la un nod adiacent
        }
        nrarce++;///nu am ajuns inca la nodul s, deci mai parcurg un arc
        ps++;
    }
}
int main()
{
    int k=0;
    f>>n>>m>>s;
    for(int i=1;i<=m;i++)
    {
        f>>c>>b;
        k++;
        T[0][k]=b;
        T[1][k]=Start[c];
        Start[c]=k;
    }
    bf(s);
    for(int i=1;i<=n;i++)
        if(viz[i]==0)
            g<<"-1 ";
        else
            g<<sol[i]<<" ";
    return 0;
}