Cod sursa(job #1979746)

Utilizator DianaVelciovVelciov Diana DianaVelciov Data 11 mai 2017 12:00:25
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb

#include <iostream>
#include <vector>
#include <fstream>
#include <cstring>
#include <queue>

using namespace std;

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

const int N_MAX=1000000;

int N,M,S,d[N_MAX];
bool use[N_MAX];
vector <int> G[N_MAX];
queue <int> q;

void bfs (int node)
{
    use[node]=true;
    q.push(node);
    while (!q.empty())
    {
        int a=q.front();
        q.pop();
        for (int vecin : G[a])
        {
            if (!use[vecin])
            {
                use[vecin]=true;
                q.push(vecin);
                d[vecin]=d[a]+1;
            }
        }
    }
}

int main()
{
    ///fopen("bfs.in","r");
    ///fopen("bfs.out","w");
    in >> N >> M >> S;
    for (int i = 0; i < M; ++i)
    {
        int x,y;
        in >> x >> y;
        G[y].push_back(x);
    }
    memset(use, -1, sizeof (use));
    memset(d, 0, sizeof (d));
    bfs(S);
    for (int i = 1; i <= N; ++i){
        if (i == S) out << "0" << " " ;
        else if (d[i] == 0) out << "-1" << " ";
        else out << d[i] << " " ;
    }

    out << '\n' ;
    return 0;
}