Pagini recente » Cod sursa (job #1684040) | Cod sursa (job #3130927) | Cod sursa (job #335656) | Cod sursa (job #1749013) | Cod sursa (job #1459093)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define MAX 100000
#define TRUE 1
#define FALSE 0
using namespace std;
typedef struct {
int n;
vector <vector <int> > V;
} Graph;
Graph G;
int d[MAX], S;
bool found[MAX];
void read() {
int m;
cin >> G.n >> m >> S;
for (int i = 0; i <= G.n; ++i) {
vector <int> v;
G.V.push_back(v);
}
for (int i = 0; i < m; ++i) {
int x, y;
cin >> x >> y;
G.V[x].push_back(y);
}
}
void bfs() {
queue <int> Q;
Q.push(S);
for (int i = 1; i <= G.n; ++i) {
d[i] = -1;
}
d[S] = 0;
found[S] = TRUE;
while (!Q.empty()) {
int curr = Q.front();
for (unsigned int i = 0; i < G.V[curr].size(); ++i) {
//if node is not found then fill in distance and add to queue
if (!found[G.V[curr][i]]) {
found[G.V[curr][i]] = TRUE;
d[G.V[curr][i]] = d[curr] + 1;
Q.push(G.V[curr][i]);
}
}
Q.pop();
}
}
int main (void) {
freopen("bfs.in", "r", stdin);
freopen("bfs.out", "w", stdout);
read();
bfs();
for (int i = 1; i <= G.n; ++i) {
cout << d[i] << " ";
}
return 0;
}