Cod sursa(job #3216345)

Utilizator raulababeiAbabei Raul raulababei Data 15 martie 2024 22:38:13
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <bits/stdc++.h>
#define NMAX 100005

using namespace std;

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

queue<pair<int, int>> q;
vector<int> vec[NMAX];
int s;
int gasit;
int result[NMAX];
int viz[NMAX];

void reset(){
    while(!q.empty()){
        q.pop();
    }
}

void bfs(){
    q.push({s, 1});
    while(!q.empty()){
        int presentNode = q.front().first;
        int pas = q.front().second;
        q.pop();
        if(viz[presentNode] != 1){
            viz[presentNode] = 1;
            for(auto punct : vec[presentNode]){
                if(result[punct] == 0){
                    result[punct] = pas;
                }
                q.push({punct, pas + 1});
            }
        }

    }
}

int main() {
    int n, m;
    in >> n >> m >> s;
    for(int i = 0;i < m;i++){
        int x, y;
        in >> x >> y;
        if(x != y)  vec[x].push_back(y);
    }

    bfs();

    for(int i = 1;i <= n;i++){
        if(i == s){
            out << "0 ";
        }
        else if(result[i] == 0){
            out << "-1 ";
        }
        else{
            out << result[i] << ' ';
        }
    }

    return 0;
}