Pagini recente » Cod sursa (job #1200660) | Cod sursa (job #640271) | Cod sursa (job #1985205) | Cod sursa (job #333403) | Cod sursa (job #2761174)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("bfs.in");
ofstream fout ("bfs.out");
const int max_val = 100001;
int n, dist[max_val], s;
struct nod
{
int info;
nod * urm;
}* lista[max_val];
void adaugare (int x, int y)
{
nod * t = new nod;
t -> info = y;
t -> urm = lista[x];
lista[x] = t;
}
void bfs (int x)
{
int coada[max_val], l = 1, r = 1;
coada[l] = x;
int d = 0;
dist[x] = 0;
while (l <= r)
{
int nod_curent = coada[l];
nod * t = lista[nod_curent];
while (t)
{
if (dist[t -> info] == 0 && t -> info != s)
{
coada[++r] = t -> info;
dist[t -> info] = dist[nod_curent] + 1;
}
t = t -> urm;
}
l++;
}
}
int main ()
{
int m;
fin >> n >> m >> s;
for (int i = 1; i <= m; i++)
{
int x, y;
fin >> x >> y;
if (x != y)
adaugare (x, y);
}
bfs(s);
for (int i = 1; i <= n; i++)
if (dist[i] == 0 && i != s)
dist[i] = -1;
for (int i = 1; i <= n; i++)
fout << dist[i] << ' ';
return 0;
}