Cod sursa(job #2662600)

Utilizator TheRealGamerFat Vlad TheRealGamer Data 24 octombrie 2020 11:42:41
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
#define NMAX 100005
using namespace std;
ifstream in("bfs.in");
ofstream out("bfs.out");

vector < int > adj[NMAX];
int n, m, start;
bool visited[NMAX];
queue <int > q;
int nr[NMAX];
void read(){
    in>>n>>m>>start;
    for(int i = 0; i < m; ++i){
        int x, y;
        in>>x>>y;
        adj[x].push_back(y);
    }
}

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

int main(){
    read();
    for(int i = 1; i <= n; ++i){
        sort(adj[i].begin(), adj[i].end());
    }
    bfs();
    for(int i = 1; i <= n; i ++){
        if(nr[i] == 0 && i == start)
            out<<nr[i]<<" ";
        else if(nr[i] == 0)
            out<<-1<<" ";
        else
            out<<nr[i]<<" ";
    }
    return 0;
}