Pagini recente » Cod sursa (job #1798007) | Cod sursa (job #330622) | Cod sursa (job #2364086) | Cod sursa (job #2888305) | Cod sursa (job #2466711)
#include <algorithm>
#include <fstream>
#include <iterator>
#include <queue>
#include <tuple>
#include <vector>
using graph_t = std::vector<std::vector<int>>;
std::vector<int> solve(const graph_t &G, int s)
{
std::queue<int> Q;
std::vector<int> D(G.size(), -1);
D[s] = 0;
Q.push(s);
while (!Q.empty())
{
auto u = Q.front();
Q.pop();
for (auto v : G[u])
{
if (D[v] == -1)
{
D[v] = D[u] + 1;
Q.push(v);
}
}
}
return D;
}
std::pair<graph_t, int> read();
void write(const std::vector<int> &D);
int main()
{
graph_t G;
int s;
std::tie(G, s) = read();
auto D = solve(G, s);
write(D);
return 0;
}
std::pair<graph_t, int> read()
{
std::ifstream fin("bfs.in");
int n, m, s, u, v;
fin >> n >> m >> s;
s--;
graph_t G(n, std::vector<int>());
while (fin >> u >> v)
{
u--, v--;
G[u].push_back(v);
}
return std::make_pair(G, s);
}
void write(const std::vector<int> &D)
{
std::ofstream fout("bfs.out");
std::copy_n(D.begin(), D.size(), std::ostream_iterator<int>(fout, " "));
fout << '\n';
}