Pagini recente » Cod sursa (job #3257173) | Borderou de evaluare (job #1988049) | Cod sursa (job #2839981) | Cod sursa (job #651563) | Cod sursa (job #1354291)
#include <fstream>
using namespace std;
ofstream g("bfs.out");
int N, M, S, x, y, dist[100001], coada[100001], prim, ultim;
struct nod{int info; nod *urm;} *p, *li[100001];
bool viz[100001];
void push(nod *&li, int informatie)
{
p=new nod();
p->info=informatie;
p->urm=li;
li=p;
}
void pop(nod *&li)
{
p=li;
li=li->urm;
delete(p);
}
void BFS()
{
int A;
prim=ultim=1;
coada[prim]=S;
while(prim<=ultim)
{
A=coada[prim];
viz[A]=1;
while(li[A])
{
if(!viz[li[A]->info])
{
dist[li[A]->info]=dist[A]+1;
ultim++;
coada[ultim]=li[A]->info;
}
pop(li[A]);
}
prim++;
}
}
int main()
{
int i;
FILE *f; f=fopen("bfs.in","r");
fscanf(f, "%d%d%d", &N, &M, &S);
for(i=1;i<=M;i++)
{
fscanf(f, "%d%d", &x, &y);
push(li[x], y);
}
BFS();
for(i=1;i<S;i++)
if(dist[i]==0) g<<"-1 ";
else g<<dist[i]<<" ";
g<<"0 ";
for(i=S+1;i<=N;i++)
if(dist[i]==0) g<<"-1 ";
else g<<dist[i]<<" ";
return 0;
}