Pagini recente » Cod sursa (job #1274243) | Cod sursa (job #3186060) | Cod sursa (job #3123811) | Cod sursa (job #3032009) | Cod sursa (job #3158369)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
std::ifstream f("bfs.in");
std::ofstream g("bfs.out");
const int MAX_N = 10000;
std::vector<std::vector<int>> adjacencyList(MAX_N + 1);
int vis[MAX_N + 1];
// construire lista adiacenta
void buildAdjacencyList(int n, int m)
{
for (int i = 0; i < n; ++i)
{
adjacencyList[i].clear();
}
for (int i = 0; i < m; i++)
{
int u, v;
f >> u >> v;
if (u != v)
adjacencyList[u].push_back(v);
}
}
// implementare bfs
void BFS(int node, std::vector<int> &d)
{
std::queue<int> c;
c.push(node);
while (!c.empty())
{
int n = c.front();
c.pop();
vis[n] = 1;
for (auto next : adjacencyList[n])
{
if (!vis[next])
{
d[next] = d[n] + 1;
c.push(next);
vis[next] = 1;
}
}
}
}
int main()
{
if (!f.is_open())
{
std::cerr << "Eroare deschidere fisier\n";
return 1;
}
int n, m, s;
f >> n >> m >> s;
buildAdjacencyList(n, m);
std::vector<int> d(n + 1);
BFS(s, d);
for (int i = 1; i < d.size(); i++)
{
if (i == s)
g << 0 << " ";
else if (d[i] == 0)
g << -1 << " ";
else
g << d[i] << " ";
}
return 0;
}