Pagini recente » Cod sursa (job #2096405) | Cod sursa (job #71765) | Cod sursa (job #1167379) | Cod sursa (job #499435) | Cod sursa (job #2963660)
#include <iostream>
#include <fstream>
#include <cstring>
#include <vector>
#include <queue>
using namespace std;
ifstream f ("bfs.in");
ofstream g ("bfs.out");
const int inf = 2e9;
int viz[100005] , dist[100005] , n , m , q , x , y;
vector <int> v[100005];
queue <int> coada;
void dij (int nod)
{
viz[nod] = 1;
coada.push (nod);
dist[nod] = 0;
while (coada.empty() == 0)
{
nod = coada.front ();
coada.pop ();
for (int i = 0 ; i < v[nod].size () ; i++)
{
int vecin = v[nod][i];
if (dist[vecin] > dist[nod] + 1)
{
dist[vecin] = dist[nod] + 1;
if (viz[vecin] == 0)
coada.push (vecin);
}
}
}
}
int main()
{
f >> n >> m >> q;
for (int i = 1 ; i <= m ; i++)
{
f >> x >> y;
v[x].push_back (y);
}
dist[q] = 0;
for (int i = 1 ; i <= n ; i++)
dist[i] = inf;
dij (q);
for (int i = 1 ; i <= n ; i++)
if (dist[i] == inf)
g << -1 << " ";
else
g << dist[i] << " ";
return 0;
}