Pagini recente » Cod sursa (job #1466222) | Cod sursa (job #1422998) | Cod sursa (job #1174999) | Cod sursa (job #2558955) | Cod sursa (job #1698927)
#include <iostream>
#include <fstream>
#include <queue>
#include <string.h>
using namespace std;
const int NMax = 100003;
int N, M, S, d[NMax];
vector<int> graf[NMax];
bool visited[NMax];
ifstream fin ("bfs.in");
ofstream fout("bfs.out");
void BFS(int s) {
queue <pair<int, int> > q;
q.push(pair<int, int>(s, 0));
visited[s] = true;
memset(d, -1, sizeof(d));
while (!q.empty()) {
int id = q.front().first;
d[id] = q.front().second;
q.pop();
visited[id] = true;
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;
}
fout << d[j] << " ";
}
}
int main() {
int x, y;
fin >> N >> M >> S;
for (int i = 0; i < M; i++) {
fin >> x >> y;
graf[x - 1].push_back(y - 1);
}
BFS(S - 1);
return 0;
}