Pagini recente » Cod sursa (job #238215) | Cod sursa (job #485619) | Cod sursa (job #1685951) | Cod sursa (job #1081738) | Cod sursa (job #1571041)
#include <iostream>
#include <fstream>
#include <vector>
#include <utility>
#include <queue>
using namespace std;
vector<int> edges[1000001];
int visited[100001];
int accesses[100001];
int vertices, arcs, s;
ifstream fin("bfs.in");
ofstream fout("bfs.out");
int main()
{
fin >> vertices >> arcs >> s;
for (int i = 1; i <= vertices; i++)
visited[i] = -1;
while (arcs--)
{
int v, w;
fin >> v >> w;
edges[v].push_back(w);
}
queue<pair<int, int>> q;
q.push(make_pair(s, 0));
visited[s] = 0;
while (!q.empty())
{
pair<int, int> parent = q.front();
accesses[parent.first]++;
q.pop();
for (auto it = edges[parent.first].begin();
it != edges[parent.first].end(); it++)
{
if (visited[*it] == -1)
{
q.push(make_pair(*it, parent.second + 1));
visited[*it] = parent.second + 1;
}
}
}
for (int i = 1; i <= vertices; i++)
fout << visited[i] << " ";
fout << endl;
fout.close();
fin.close();
return 0;
}