Pagini recente » Cod sursa (job #244186) | Clasamentul arhivei de probleme | Cod sursa (job #2121537) | Cod sursa (job #117298) | Cod sursa (job #2409382)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define NMAX 100100
using namespace std;
ifstream f("bfs.in");
ofstream g("bfs.out");
vector<int> a[NMAX];
int dist[NMAX], listArr[NMAX];
int n, m, nodSt;
void citire() {
f >> n >> m >> nodSt;
nodSt--;
for (int i = 0; i < m; ++i) {
int x, y;
f >> x >> y;
x --;
y --;
a[x].push_back(y);
}
}
void BFS(int x) {
int st;
int dr;
st = 0;
dr = 0;
listArr[st] = x;
dist[x] = 1;
while (st <= dr) {
int curr = listArr[st];
st ++;
for (int i = 0; i < a[curr].size(); ++i) {
int nodeCrt = a[curr][i];
if (!dist[nodeCrt]) {
dist[nodeCrt] = dist[curr] + 1;
dr ++;
listArr[dr] = nodeCrt;
}
}
}
for (int i = 0; i < n; ++i) {
if (!dist[i]) {
g << "-1 ";
} else {
g << dist[i] - 1 << " ";
}
}
}
void rez() {
BFS(nodSt);
}
int main() {
citire();
rez();
return 0;
}