Cod sursa(job #2668169)

Utilizator florescu.mirunaMiruna Stefania Florescu florescu.miruna Data 4 noiembrie 2020 16:33:52
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.34 kb
#include <iostream>
#include<fstream>
#include <vector>
#include<queue>
using namespace std;
ifstream f ("bfs.in");
ofstream g ("bfs.out");

vector <int> a[100005];
queue <int> Q;
int n,m,s,drum[100005];
bool viz[100005];

void citire()
{
    int x,y;
    f>>n>>m>>s;
    while(m)
    {
        f>>x>>y;
        a[x].push_back(y);
        m--;
    }
}
void BFS(int x)
{

    drum[x] = 0;
    ///Initial punem in coada nodul de la care plecam
    Q.push(x);
    viz[x] = true;
    ///Cat timp inca mai avem noduri in coada se executa parcurgerea

    while(!Q.empty())
    {
        ///Salvam intr-o variabila primul nod din coada, il eliminam si
        ///si ii parcurgem vecinii, salvand pentru fiecare nod lungimea drumului
        ///de la sursa la el

        x = Q.front();
        Q.pop();

        for(auto it: a[x])
            if(!viz[it])
            {
                drum[it] = drum[x] + 1;
                viz[it] = true;
                Q.push(it);
            }
    }


}
int main()
{
    citire();
    BFS(s);

    for(int i=1; i<=n; i++)
    {
        ///Daca drumul este 0 inseamna ca nu am ajuns la el cu BFS-ul
        ///deci nu exista drum (exceptie facand nodul sursa)

        if(i!= s && drum[i]==0)
            drum[i] = -1;
        g<<drum[i]<<" ";

    }

    return 0;
}