Pagini recente » Cod sursa (job #600950) | Cod sursa (job #1483095) | Istoria paginii runda/georgedumitru/clasament | Cod sursa (job #600904) | Cod sursa (job #2797394)
#include <vector>
#include <fstream>
#include <queue>
using namespace std;
ifstream f("bfs.in");
ofstream o("bfs.out");
class Graph
{
public:
vector<vector<int>> adjList;
int size;
Graph(int n)
{
size = n + 1;
adjList.resize(size);
}
void addEdge(int start, int end)
{
adjList[start].push_back(end);
}
void BFS(int node)
{
vector<int> Cost;
queue<int> Q;
for (int i = 1; i <= size; i++)
Cost.push_back(-1);
Cost[node] = 0;
Q.push(node);
while (!Q.empty())
{
node = Q.front();
Q.pop();
for (auto i : adjList[node])
if (Cost[i] == -1)
{
Cost[i] = Cost[node] + 1;
Q.push(i);
}
}
for (int i = 1; i <= size - 1; i++)
o << Cost[i] << " ";
}
};
int main()
{
int n, m, s;
int x, y;
f >> n >> m >> s;
Graph g(n);
for (int i = 1; i <= m; i++)
{
f >> x >> y;
g.addEdge(x, y);
}
g.BFS(s);
return 0;
}