Cod sursa(job #2660626)

Utilizator stanciucalinStanciu Calin stanciucalin Data 19 octombrie 2020 21:33:50
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;

ifstream f("bfs.in");
ofstream g("bfs.out");

int s;

int n, m;
vector <int> * lv;

int * visited;
int * dist;

void BFS(){

    queue <int> q;

    q.push(s);

    while(!q.empty()){

        int node = q.front();

        for(int i = 0; i < lv[node].size(); i++){

            int next_node = lv[node][i];

            if(!visited[next_node]){

                q.push(next_node);
                visited[next_node] = 1;

                dist[next_node] = dist[node] + 1;
            }
        }

        q.pop();
    }
}

int main(){

    f >> n >> m >> s;

    lv = new vector <int>[n + 1];
    visited = new int[n + 1];
    dist = new int[n + 1];

    for(int i = 0 ;i <= n; i++){

        visited[i] = 0;
        dist[i] = -1;
    }
    dist[s] = 0;
    visited[s] = 1;

    int x, y;
    for(int i = 0; i < m; i++){

        f >> x >> y;
        lv[x].push_back(y);
    }

    BFS();

    for(int i = 1; i <= n; i++)
        g << dist[i] << " ";

    return 0;
}