Pagini recente » Cod sursa (job #2291924) | Cod sursa (job #2569843) | Cod sursa (job #1897955) | Cod sursa (job #2106561) | Cod sursa (job #2335009)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
typedef unsigned int uint;
ifstream fin("bfs.in");
ofstream fout("bfs.out");
class Graph
{
uint V;
vector<vector<uint>> adj;
public:
Graph(const uint V);
void Add_edge(uint x, uint y);
void BFS(uint start);
};
Graph::Graph(const uint V)
{
this->V = V;
adj.assign(V + 1, vector<uint>());
}
void Graph::Add_edge(uint x, uint y)
{
adj[x].emplace_back(y);
}
void Graph::BFS(uint start)
{
queue<uint> Q;
Q.push(start);
vector<int> dist(V + 1, 0);
dist[start] = 1;
while (!Q.empty())
{
uint n = Q.front();
Q.pop();
for (auto &i : adj[n])
{
if (!dist[i])
{
dist[i] = 1 + dist[n];
Q.push(i);
}
}
}
for (uint i = 1; i <= V; ++i)
fout << dist[i] - 1 << ' ';
}
int main()
{
uint n,m,src;
fin >> n >> m >> src;
Graph G(n);
for (uint x,y, i = 0; i < m; ++i)
{
fin >> x >> y;
G.Add_edge(x,y);
}
G.BFS(src);
}