Pagini recente » Cod sursa (job #1670027) | Cod sursa (job #1765973) | Cod sursa (job #1872575) | Cod sursa (job #922264) | Cod sursa (job #1420899)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream in("bfs.in");
ofstream out("bfs.out");
void bfs(const vector<vector<int> >& tree, int source, vector<int>& distances)
{
vector<int> vis(tree.size(), 0);
queue<int> bfsQ;
bfsQ.push(source);
vis[source] = 1, distances[source] = 0;
while (!bfsQ.empty()) {
int currNode = bfsQ.front();
bfsQ.pop();
vector<int>::const_iterator it = tree[currNode].begin();
for (; it != tree[currNode].end(); it++) {
if (!vis[*it]) {
distances[*it] = distances[currNode] + 1;
bfsQ.push(*it);
vis[*it] = 1;
}
}
}
}
int main()
{
int N, M, source;
in >> N >> M >> source;
vector<vector<int> > tree(N + 1);
int x, y;
for (int i = 1; i <= M; i++) {
in >> x >> y;
tree[x].push_back(y);
}
vector<int> distances(N + 1, -1);
bfs(tree, source, distances);
for (int i = 1; i <= N; i++)
out << distances[i] << " ";
out << '\n';
return 0;
}