Pagini recente » Cod sursa (job #1716652) | Cod sursa (job #81142) | Cod sursa (job #2193165) | Cod sursa (job #736487) | Cod sursa (job #3199568)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("bfs.in");
ofstream fout("bfs.out");
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() {
fin >> nrNod >> nrMuc >> nodSt;
listeAd = vector<vector<int>> (nrNod + 1);
for (int i = 0; i < nrMuc; ++i) {
int x, y;
fin >> 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];
}
fout << cost[i] << ' ';
}
}
/*
idee facem lista de ad si mat de ad
*/