Pagini recente » Cod sursa (job #2324706) | Cod sursa (job #1247824)
#include <fstream>
#include <vector>
#include <list>
#include <queue>
#include <iostream>
std::vector<int> distances(std::vector< std::list<int> > &adj, int S)
{
std::vector<int> dists(adj.size(), -1);
std::queue<int> bfs_queue;
bfs_queue.push(S);
int count = 0;
dists[S] = count;
while (!bfs_queue.empty()) {
int curr_node = bfs_queue.front();
bfs_queue.pop();
for (std::list<int>::const_iterator ij = adj[curr_node].cbegin();
ij != adj[curr_node].cend(); ++ij)
if (dists[*ij] == -1) {
bfs_queue.push(*ij);
dists[*ij] = dists[curr_node] + 1;
}
}
return dists;
}
int main()
{
std::ifstream fin("bfs.in");
std::ofstream fout("bfs.out");
int N, M, S;
fin >> N >> M >> S;
std::vector< std::list<int> > adj(N);
for (int i = 0; i < M; ++i) {
int x, y;
fin >> x >> y;
adj[x-1].push_back(y-1);
}
fin.close();
--N, --M, --S;
std::vector<int> dists = distances(adj, S);
for (std::vector<int>::const_iterator it = dists.cbegin();
it != dists.cend(); ++it) {
fout << *it << " ";
}
fout.close();
return 0;
}