Cod sursa(job #1713837)

Utilizator dcutitoiuCutitoiu Adrian-Nicolae dcutitoiu Data 6 iunie 2016 18:36:22
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.32 kb
#include <iostream>
#include <fstream>
#include <map>
#include <vector>
#include <list>
#include <iterator>
#include <queue>
#include <algorithm>
#include <tuple>

using namespace std;

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

void read(int M, vector<vector<int>> &adj){
    int X, Y;

    while(M--){
        in >> X >> Y;
        adj[X].push_back(Y);
    }
}

vector<int> bfs(const vector<vector<int>> &adj, int S, int N){
    queue<int> coada;
    vector<bool> visited(N+1);
    vector<int> distance(N+1);

    coada.push(S);
    distance[S] = 0;
    visited[S] = true;

    while(!coada.empty()){

        for(auto &nod : adj[coada.front()]){

            if(visited[nod] == false){
                distance[nod] = distance[coada.front()] + 1;
                visited[nod] = true;
                coada.push(nod);
            }

        }

        coada.pop();
    }
    vector<int> result;
    for(int i = 1; i <= N; i++){
        if(visited[i])
            result.push_back(distance[i]);
        else
            result.push_back(-1);
    }

    return result;
}

int main(){

    int N, M, S;

    in >> N >> M >> S;

    vector<vector<int>> adj(N+1);
    read(M, adj);

    for(const auto &val : bfs(adj, S, N))
        out << val << ' ';


    return 0;
}