Cod sursa(job #3181584)

Utilizator AlexDudescuDudescu Alexandru AlexDudescu Data 7 decembrie 2023 13:11:57
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>


using namespace std;

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

const int NMAX = 100005;
const int MMAX = 1000005;

vector < int > G[NMAX];


int N, M, S;
int viz[NMAX];
int dist[NMAX];

queue < int > q;
void read() {
    fin >> N >> M >> S;
    for (int i = 1; i <= M; i++) {
        int x, y;
        fin >> x >> y;
        G[x].push_back(y);
    }
}

void bfs() {
    q.push(S);
    viz[S] = 1;
    while (!q.empty()) {
        int nodc = q.front();
        q.pop();
        for (int i = 0; i < G[nodc].size(); i++) {
            int vecin = G[nodc][i];
            if (viz[vecin] == 0) {
                q.push(vecin);
                dist[vecin] = dist[nodc] + 1;
                viz[vecin] = 1;
            }
        }
    }
}

int main()
{
    read();
    bfs();
    cout << endl;
    for (int i = 1; i <= N; i++) {
        if (viz[i] == 0)
            fout << -1 << " ";
        else
            fout << dist[i] << " ";
    }
    return 0;
}