Pagini recente » Cod sursa (job #2365037) | Cod sursa (job #2485960) | Cod sursa (job #1989631) | Cod sursa (job #1674650) | Cod sursa (job #2924809)
#include <iostream>
#include <vector>
#include <fstream>
#include <queue>
using namespace std;
ifstream fin("bfs.in");
bool *viz;
int *dist;
void bfs(vector<int> *la,int n) {
queue<int> coada;
coada.push(n);
viz[n] = true;
dist[n] = 0;
while (!coada.empty()) {
int u = coada.front();
coada.pop();
for (int i = 0; i < la[u].size(); i++) {
int v = la[u][i];
if (!viz[v]) {
viz[v] = true;
coada.push(v);
dist[v] = dist[u] + 1;
}
}
}
}
int main() {
vector<int> *la;
int n, m, s;
fin >> n >> m >> s;
la = new vector<int>[n + 1];
for (int i = 0; i < m; i++) {
int x, y;
fin >> x >> y;
la[x].push_back(y);
}
viz = new bool[n + 1];
for (int i = 1l; i <= n; i++)
viz[i] = false;
dist = new int[n + 1];
for (int i = 0; i <= n; i++)
dist[i] = -1;
bfs(la, s);
for (int i = 1; i <= n; i++)
cout << dist[i] << " ";
return 0;
}