Pagini recente » Cod sursa (job #2408821) | Cod sursa (job #1479181) | Cod sursa (job #2691383) | Cod sursa (job #1126917) | Cod sursa (job #1248446)
#include <algorithm>
#include <fstream>
#include <iterator>
#include <queue>
#include <vector>
using namespace std;
vector<vector<size_t>> G;
vector<int> bfs(const size_t source, const vector<vector<size_t>>& G) {
vector<int> D(G.size(), -1);
queue<size_t> Q;
for(Q.push(source), D[source] = 0; !Q.empty(); Q.pop())
for (int v : G[Q.front()])
if (D[v] == -1) { // vertex not visited
Q.push(v);
D[v] = D[Q.front()] + 1;
}
return D;
}
int main() {
ifstream fin("bfs.in");
ofstream fout("bfs.out");
int n, m, source;
fin >> n >> m >> source; source--;
for (G.resize(n); m; --m) {
int u, v;
fin >> u >> v;
G[u-1].push_back(v-1);
}
vector<int> D = bfs(source, G);
copy(D.begin(), D.end(), ostream_iterator<int>(fout, " "));
fout << endl;
return 0;
}