Pagini recente » Cod sursa (job #763032) | Cod sursa (job #2268022) | Cod sursa (job #2942127) | Cod sursa (job #2281060) | Cod sursa (job #2511671)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("bfs.in");
ofstream out("bfs.out");
const int N = 1000001;
int n, m, nr, s, q[N], distances[N];
int vf[2 * N], lst[N], urm[2 * N];
void adauga(int x, int y) {
vf[++nr] = y;
urm[nr] = lst[x];
lst[x] = nr;
}
struct comp {
int x, y;
}v[N];
int main() {
cin >> n >> m >> s;
for (int i = 1; i <= m; i++) {
cin >> v[i].x >> v[i].y;
adauga(v[i].x, v[i].y);
}
for (int i = 1; i <= n; i++) distances[i] = -1;
int st = 0, dr = -1;
q[++dr] = s;
distances[s] = 0;
while (st <= dr) {
//scot x din q
int x = q[st++];
for (int p = lst[x]; p != 0; p = urm[p]) {
int y = vf[p];
if (distances[y] == -1) {
q[++dr] = y;
distances[y] = 1 + distances[x];
}
}
}
for (int i = 1; i <= n; i++) cout << distances[i] << ' ';
return 0;
}