Pagini recente » Cod sursa (job #1904658) | Cod sursa (job #517324) | Cod sursa (job #1412392) | Cod sursa (job #386559) | Cod sursa (job #1641206)
// Infoarena DFS
#include <fstream>
#include <vector>
#include <queue>
std::vector<std::vector<int>> graph;
std::vector<bool> visited;
int vertices, edges, start;
std::vector<int> getRoadDistance(int vertex)
{
if (vertex < 1 || vertex > vertices)
return std::vector<int>();
std::queue<int> queue;
std::vector<int> roadDistance(vertices + 1, -1);
queue.push(vertex);
visited[vertex] = true;
roadDistance[vertex] = 0;
while (!queue.empty())
{
int element = queue.front();
for (int i = 0; i < graph[element].size(); i++)
if (!visited[graph[element][i]])
{
roadDistance[graph[element][i]] = roadDistance[element] + 1;
queue.push(graph[element][i]);
visited[graph[element][i]] = true;
}
queue.pop();
}
return roadDistance;
}
int main()
{
std::ifstream f("bfs.in");
f >> vertices >> edges >> start;
graph.resize(vertices + 1);
visited.resize(vertices + 1, false);
for (int i = 0; i < edges; i++)
{
int x, y;
f >> x >> y;
graph[x].push_back(y);
}
std::vector<int> rD = getRoadDistance(start);
std::ofstream g("bfs.out");
for (int i = 1; i < rD.size(); i++)
g << rD[i] << " ";
return 0;
}