Pagini recente » Borderou de evaluare (job #1709968) | Cod sursa (job #2319186) | Cod sursa (job #3275402) | Cod sursa (job #2319221) | Cod sursa (job #2451116)
#include <fstream>
#include <vector>
#include <queue>
int main()
{
std::vector<std::vector<size_t>> graph(100000 + 1, std::vector<size_t>());
std::vector<int> distance(100000 + 1, -1);
size_t N, M, S, x, y;
std::ifstream fin("bfs.in");
std::ofstream fout("bfs.out");
fin >> N >> M >> S;
while(fin >> x >> y) graph[x].push_back(y);
std::queue<size_t> q;
q.push(S);
distance[S] = 0;
while(!q.empty())
{
size_t current_node = q.back();
q.pop();
for(std::vector<size_t>::iterator it = graph[current_node].begin(); it < graph[current_node].end(); it++)
{
if(distance[*it] == -1)
{
distance[*it] = distance[current_node] + 1;
q.push(*it);
}
}
}
for(size_t i = 1; i <= N; i++) fout << distance[i] << ' ';
}