Pagini recente » Cod sursa (job #2899334) | Cod sursa (job #2335947) | Cod sursa (job #805595) | Cod sursa (job #582531) | Cod sursa (job #2036197)
#include <cstdio>
#include <vector>
#include <queue>
#include <cstring>
FILE *fin, *fout;
#define MAXN (int)1e5
std::vector <int> v[MAXN + 1];
std::queue <int> q;
#define inf 0x3f3f3f3f
#define INF 1061109567
int N, M, S;
int cost[MAXN + 1];
int main() {
fin = fopen("bfs.in", "r");
fout = fopen("bfs.out", "w");
fscanf(fin, "%d%d%d", &N, &M, &S);
for(int i = 1;i <= M;i++) {
int x, y;
fscanf(fin, "%d%d", &x, &y);
v[x].push_back(y);
}
memset(cost, inf, sizeof cost);
q.push(S);
cost[S] = 0;
while(q.size()) {
int nod = q.front();
q.pop();
for(auto x : v[nod]) {
if(cost[x] > cost[nod] + 1) {
cost[x] = cost[nod] + 1;
q.push(x);
}
}
}
for(int i = 1;i <= N;i++) {
if(cost[i] >= INF)
fprintf(fout, "-1 ");
else
fprintf(fout, "%d ", cost[i]);
}
fclose(fin);
fclose(fout);
return 0;
}