Cod sursa(job #2667904)

Utilizator anamaria2602Avram Ana Maria anamaria2602 Data 4 noiembrie 2020 01:15:00
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <iostream>
#include <vector>
#include <queue>
#include <fstream>
using namespace std;
ifstream f("bfs.in");
ofstream g("bfs.out");
int n, m, val, x1, x2, Dist[100003], coada[100003];
vector <int> V[100003];
queue < int > Q;
vector <int>::iterator it;
void bfs()
{
    Dist[val] = 0; ///atribuim distantei de plecare valoarea 0
    Q.push(val);  ///adaugam in coada prima valoare
    while ( !Q.empty()) ///cat timp coada nu e vida
    {
        int nod = Q.front();///extragem varful
        Q.pop();///eliminam varful
        for ( it = V[nod].begin(); it < V[nod].end(); it ++ ) /// parcurgem vectorul de arce al nodului
        {
            if ( Dist[*it] == -1 ) ///daca inca nu am gasit un drum potrivit
            {
                Dist[*it] = Dist[nod] + 1; ///distanta curenta devine distanta nodului+1
                Q.push(*it);
            }
        }
    }
}

int main()
{
    f >> n >> m >> val;
    for ( int i = 1 ; i <= m ; i++ ) ///creem vectorul de arce
    {
        f >> x1 >> x2;
        V[x1].push_back(x2);
    }
    for ( int i = 1 ; i <= n ; i ++ )
        Dist[i] = -1 ;
    bfs();
    for ( int i = 1 ; i <= n ; i ++ )
        g << Dist[i] << " "; ///afisam distantele
    return 0;
}