Cod sursa(job #3199567)

Utilizator BoggiGurau Bogdan Boggi Data 1 februarie 2024 20:30:54
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;

const int MAX_NOD = 100001;

vector<vector<int>> listeAd;
bool vis[MAX_NOD];
int cost[MAX_NOD], nrNod, nrMuc, nodSt;

void BFS(queue<int> &neviz) {
    if(neviz.empty()) {
        return;
    }
    int nodC = neviz.front();
    neviz.pop();
    for (int i = 0; i < listeAd[nodC].size(); ++i) {
        int nodVecin = listeAd[nodC][i];
        if (!vis[nodVecin]) {
            vis[nodVecin] = true;
            cost[nodVecin] = cost[nodC] + 1;
            neviz.push(nodVecin);
        }
    }
    BFS(neviz);
}

int main() {
    cin >> nrNod >> nrMuc >> nodSt;
    listeAd = vector<vector<int>> (nrNod + 1);
    for (int i = 0; i < nrMuc; ++i) {
        int x, y;
        cin >> x >> y;
        listeAd[x].push_back(y);
    }
    queue<int> neviz;
    vis[nodSt] = true;
    neviz.push(nodSt);
    BFS(neviz);
    for (int i = 1; i <= nrNod; ++i) {
        if (cost[i] == 0 && i != nodSt) {
            --cost[i];
        }
        cout << cost[i] << ' ';
    }
}
/*
idee facem lista de ad si mat de ad
*/