Pagini recente » Cod sursa (job #428720) | Cod sursa (job #2409127) | Cod sursa (job #663702) | Cod sursa (job #2366191) | Cod sursa (job #1041973)
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#define NMAX 100001
#define node first
#define dist second
using namespace std;
int N, M, S, i, node1, node2 ;
int Min[NMAX];
vector<int> G[NMAX];
vector<int>::iterator adjNode;
bool Used[NMAX];
queue< pair<int, int> > Q;
inline void BFS() {
pair<int,int> current = Q.front();
Q.pop();
Min[current.node] = current.dist;
for(adjNode = G[current.node].begin(); adjNode != G[current.node].end(); ++adjNode)
if(!Used[*adjNode]) {
Used[*adjNode] = true;
Q.push(make_pair(*adjNode, current.dist + 1));
}
}
int main() {
freopen("bfs.in", "r", stdin);
freopen("bfs.out", "w", stdout);
scanf("%d%d%d", &N, &M, &S);
while(M--) {
scanf("%d%d", &node1, &node2);
G[node1].push_back(node2);
}
for(i = 1; i <= N; ++i)
Min[i] = -1;
memset(Used, false, sizeof(Used));
Q.push(make_pair(S, 0));
Used[S] = true;
while(!Q.empty())
BFS();
for(i = 1; i <= N; ++i)
printf("%d ", Min[i]);
return 0;
}