Cod sursa(job #2712180)

Utilizator Fatu_SamuelFatu Samuel Fatu_Samuel Data 25 februarie 2021 12:21:11
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <fstream>
#include <bitset>
#include <queue>

using namespace std;

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

const int nMax = 100000 + 10;

int n, m, s;

vector < int > l[nMax];
queue < int > q;
bitset < nMax > viz;
int dist[nMax];

void Bfs(int node)
{
    q.push(node);
    viz[node]  = 1;
    dist[node] = 0;

    while (!q.empty())
    {
        node = q.front();
        q.pop();

        for (int nextNode : l[node])
        {
            if (!viz[nextNode])
            {
                viz[nextNode] = 1;
                dist[nextNode] = dist[node] + 1;
                q.push(nextNode);
            }
        }
    }
}

int main()
{
    fin >> n >> m >> s;

    for (int i = 1; i <= m; i++)
    {
        int a, b;

        fin >> a >> b;

        l[a].push_back(b);
    }

    Bfs(s);
    
    for (int i = 1; i <= n; i++)
    {
        if (dist[i] == 0 && i != s)
        {
            fout << "-1 ";
        }
        else
        {
            fout << dist[i] << ' ';    
        }
    }

    fin.close();
    fout.close();
    return 0;
}