Pagini recente » Cod sursa (job #824578) | Cod sursa (job #901387) | Cod sursa (job #1262732) | Cod sursa (job #612607) | Cod sursa (job #1698977)
#include <iostream>
#include <fstream>
#include <queue>
#include <string.h>
using namespace std;
const int NMax = 100003;
int N, M, S, d[NMax];
ifstream fin ("bfs.in");
ofstream fout("bfs.out");
void BFS(int s, std::vector<int> const (&graf)[NMax]) {
int visited[NMax];
int d[NMax];
memset(d, -1, sizeof(d));
memset(visited, 0, sizeof(visited));
queue <pair<int, int> > q;
q.push(pair<int, int>(s, 0));
visited[s] = 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] == 0) {
q.push(pair<int, int>(idVecin, d[id] + 1));
visited[idVecin] = 1;
}
}
}
for (int j = 0; j < N; j++) {
if (j == s) {
d[j] = 0;
}
fout << d[j] << " ";
}
}
int main() {
int x, y;
fin >> N >> M >> S;
vector<int> graf[NMax];
for (int i = 0; i < M; i++) {
fin >> x >> y;
graf[x - 1].push_back(y - 1);
}
BFS(S - 1, graf);
return 0;
}