Pagini recente » Cod sursa (job #911375) | Cod sursa (job #844169) | Cod sursa (job #1018951) | Cod sursa (job #1637215) | Cod sursa (job #1116517)
#include <fstream>
#define nmax 100006
using namespace std;
ifstream fin("bfs.in");
ofstream fout("bfs.out");
struct graf
{
int nod;
graf *next;
};
graf *L[nmax];
int viz[nmax];
int N, M, S;
void add (int from, int to)
{
graf *q = new graf;
q -> nod = to;
q -> next = L[from];
L[from] = q;
}
void read ()
{
int x, y, i;
fin >> N >> M >> S;
for (i = 1; i <= M; ++i)
{
fin >> x >> y;
add(x, y);
}
}
int BFS(int nod)
{
int c[nmax], u, p, i;
graf *q;
for (i = 1; i <= N; ++i)
{
viz[i] = 0;
c[i] = 0;
}
viz[S] = 1;
u = 1;
p = 1;
i = 0;
c[1] = S;
while (p <= u && viz[nod] == 0)
{
++i;
q = L[c[p]];
while (q != NULL && viz[nod] == 0)
{
if (viz[q -> nod] == 0)
{
++u;
c[u] = q -> nod;
viz[q -> nod] = 1;
}
q = q -> next;
}
++p;
}
if (viz[nod] == 0)
return -1;
return i;
}
int main()
{
int i;
read();
for (i = 1; i <= N; ++i)
fout << BFS(i) << "\n";
return 0;
}