Cod sursa(job #2763437)

Utilizator Teodor_AxinteAxinte Teodor-Ionut Teodor_Axinte Data 14 iulie 2021 09:30:13
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <fstream>
#include <iostream>
#include <stack>
#include <queue>
#include <bitset>

using namespace std;

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

int n, m, nod;
int a[1010][1010], ans[1010][2];
queue<pair<int, int>> q;
bitset<100010> viz;

void bfs(int nod) {
    while (!q.empty()) {
        pair<int, int> dp = q.front();
        int x = dp.first;
        int y = dp.second;
        ans[x][0] = y;
        for (int i = 1; i <= n; i++)
            if (a[x][i] && !viz[i]) {
                q.push(make_pair(i, y + 1));
                viz[nod] = 1;
            }
        q.pop();
    }
}

int main() {
    fin >> n >> m >> nod;
    viz[nod] = 1;

    for (; m != 0; m--) {
        int x, y;
        fin >> x >> y;
        a[x][y] = 1;

    }
    q.push(make_pair(nod, 0));
    bfs(nod);

    for (int i = 1; i <= n; i++) {
        if (i != nod && ans[i][0] == 0)
            ans[i][0] = -1;
        fout << ans[i][0] << " ";
    }
    return 0;
}