Pagini recente » Borderou de evaluare (job #3156389) | Borderou de evaluare (job #743749) | Rezultatele filtrării | Profil victor.ionescu | Cod sursa (job #694824)
Cod sursa(job #694824)
#include <fstream>
#include <stdio.h>
using namespace std;
FILE * bfs;
ofstream g("bfs.out");
struct nod
{
long inf;
nod *urm;
};
nod *p[100003],*ultim[100003],*q;
long cost[100003],c[100003];
long i,m,n,s,x;
void creare()
{
for (i=1;i<=m;i++)
{
p[i]=new nod;
p[i]->inf=0;
p[i]->urm=NULL;
ultim[i]=p[i];
}
}
void citire()
{
long y;
for (i=1;i<=m;i++)
{
fscanf(bfs,"%ld %ld",&x,&y);
q=new nod;
q->inf=y;
q->urm=NULL;
ultim[x]->urm=q;
ultim[x]=q;
}
}
void sterg()
{
for (i=1;i<=m;i++)
{
q=p[i];
p[i]=p[i]->urm;
q->urm=NULL;
delete q;
}
}
void bf(long s)
{
long pr,u,viz[100003];
c[1]=s;
viz[s]=1;
pr=1;
u=1;
cost[s]=0;
while (pr<=u)
{
x=c[pr];
q=p[x];
while (q)
{
if (!viz[q->inf])
{
u++;
c[u]=q->inf;
viz[q->inf]=1;
cost[q->inf]=cost[x]+1;
}
q=q->urm;
}
pr++;
}
}
int main()
{
bfs=fopen("bfs.in","r");
fscanf(bfs,"%ld %ld %ld",&n,&m,&s);
creare();
citire();
sterg();
bf(s);
for (i=1;i<=n;i++)
{
if (i!=s && !cost[i]) g<<"-1 ";
else g<<cost[i]<<' ';
}
g<<'\n';
g.close();
return 0;
}