Pagini recente » Cod sursa (job #44308) | Cod sursa (job #2366182) | Cod sursa (job #1843461) | Cod sursa (job #3176901) | Cod sursa (job #700311)
Cod sursa(job #700311)
#include<fstream>
#include<algorithm>
using namespace std;
ifstream f("bfs.in");
ofstream g("bfs.out");
int n, m, S, Cost[100001], q[100001];
char U[100001];
struct lista
{
int nod;
lista *urm;
} *G[100001];
void adauga(int i, int j)
{
lista *p;
p = new lista;
p->nod = j;
p->urm = G[i];
G[i] = p;
}
void citire()
{
f >> n >> m >> S;
int x, y;
while(m--)
{
f >> x >> y;
adauga(x, y);
}
}
void BF(int vf)
{
int st, dr;
lista *p;
q[1] = vf;
U[vf] = 1;
st = dr = 1;
for(; st<=dr; st++)
{
p = G[ q[st] ];
while(p)
{
if(!U[p->nod])
{
Cost[p->nod] = Cost[ q[st] ] + 1;
U[p->nod] = 1;
q[++dr] = p->nod;
}
p = p->urm;
}
}
}
int main()
{
citire();
BF(S);
for(int i=1; i<=n; i++)
if( Cost[i] ) g << Cost[i] << " ";
else if ( i == S ) g << "0 ";
else g << "-1 ";
g << "\n";
return 0;
}