Pagini recente » Cod sursa (job #2211759) | Cod sursa (job #498797) | Cod sursa (job #1208194) | Cod sursa (job #1983143) | Cod sursa (job #1698916)
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <queue>
using namespace std;
const int NMax = 100003;
int N, M, S, d[NMax];
vector<int> graf[NMax];
bool visited[NMax];
FILE *in = fopen("bfs.in", "r");
FILE *out = fopen("bfs.out", "w");
void BFS(int s) {
printf("s = %d\n", s);
queue <pair<int, int> > q;
q.push(pair<int, int>(s, 0));
visited[s] = true;
for (int i = 0; i < N; i++) {
d[i] = -1;
}
while (!q.empty()) {
int id = q.front().first;
d[id] = q.front().second;
q.pop();
int nrVecini = graf[id].size();
for (int i = 0; i < nrVecini; i++) {
int idVecin = graf[id][i];
if (!visited[idVecin]) {
q.push(pair<int, int>(idVecin, d[id] + 1));
}
}
}
for (int j = 0; j < N; j++) {
if (j == s) {
d[j] = 0;
}
fprintf(out, "%d ", d[j]);
}
}
int main() {
int x, y;
fscanf(in, "%d %d %d", &N, &M, &S);
for (int i = 0; i < M; i++) {
fscanf(in, "%d %d", &x, &y);
graf[x - 1].push_back(y - 1);
}
BFS(S - 1);
fclose(in);
fclose(out);
return 0;
}