Cod sursa(job #2542408)

Utilizator GeorgianBaditaBadita Marin-Georgian GeorgianBadita Data 9 februarie 2020 22:22:33
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include<fstream>
#include<queue>
#include<iostream>
#include<vector>
#define NMAX 100005

//in-out
std::ifstream f("bfs.in");
std::ofstream g("bfs.out");

//data
int n, m, start;
std::queue<int> q;
std::vector<int>G[NMAX];
std::vector<int> dist(NMAX);
std::vector<bool> visited(NMAX);

//readData
void readData(){
    f >> n >> m >> start;
    int x, y;
    for(int i = 0; i<m; i++){
        f >> x >> y;
        //std::cout << x << " -> " << y << '\n';
        G[x].push_back(y);
    }
}

//solve
void solve(int start){
    for(int i = 1; i<=n; i++){
        dist[i] = -1;
    }
    dist[start] = 0;
    visited[start] = true;
    q.push(start);
    while(!q.empty()){
        int node = q.front();
        q.pop();
        for(const auto& adj : G[node]){
            if(!visited[adj]){
                q.push(adj);
                visited[adj] = true;
                dist[adj] = 1 + dist[node];
            }
        }

    }
}

//print solution
void printResult(){

    for(int i = 1; i<= n; i++){
        g << dist[i] << ' ';
    }
}

int main(){
    readData();
    solve(start);
    printResult();
    return 0;
}