Cod sursa(job #2662571)

Utilizator Dorin07Cuibus Dorin Iosif Dorin07 Data 24 octombrie 2020 11:29:25
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <bits/stdc++.h>
#define NMAX 100005
#define INF 2000000000
using namespace std;

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

vector < int > nod[NMAX];
queue < int > q;

int n, m, s, x, y, drum[NMAX];
bool visited[NMAX];

void citire(){
    fin>>n>>m>>s;
    for(int i = 1; i <= m; ++i){
        fin>>x>>y;
        nod[x].push_back(y);
    }
    for(int i = 1; i <= n; ++i)
        drum[i] = INF;
    drum[s] = 0;
}

void bfs(){
    q.push(s);
    visited[s] = 1;
    while(!q.empty()){
        int node = q.front();
        q.pop();
        for(int j = 0; j < nod[node].size(); ++j){
            if(drum[nod[node][j]] > drum[node] + 1){
                drum[nod[node][j]] = drum[node] + 1;
                if(!visited[nod[node][j]]){
                    q.push(nod[node][j]);
                    visited[nod[node][j]] = 1;
                }
            }
        }

    }
}

int main(){
    citire();
    bfs();
    for(int i = 1; i <= n; ++i){
        if(drum[i] == INF)
            drum[i] = -1;
        fout<<drum[i]<<' ';
    }
    return 0;
}