Pagini recente » Cod sursa (job #957091) | Cod sursa (job #1138196) | Cod sursa (job #1497295) | Cod sursa (job #2634129) | Cod sursa (job #699540)
Cod sursa(job #699540)
#include<iostream.h>
#include<stdio.h>
#define NMax 10000
FILE *fin, *fout;
long n,m,s;
int x,y;
long int a[NMax][NMax];
long int viz[NMax],c[NMax],r[NMax];
int citire()
{
fscanf(fin,"%d%d%d",&n,&m,&s);
while(m!=0)
{
fscanf(fin,"%d%d",&x, &y);
if(x!=y)
{
a[x][0]++;
a[x][a[x][0]]=y;
}
m--;
}
}
int parcurg(int x)
{
long i,j,nr;
long prim,ultim;
long drum[NMax];
viz[x]=-1;
for(i=1;i<=n;i++)
{
nr=0;
c[0]=x;
prim=ultim=0;
while(prim<=ultim && viz[i]==0)
{
x = c[prim++];
for(j=1;j<=a[x][0];j++)
if(viz[a[x][j]]==0)
{
viz[a[x][j]]=x;
if(viz[i]!=0)
break;
else
c[++ultim]=a[x][j];
}
}
if(i==s)
r[i]=0;
else
if(viz[i]==0)
r[i]=-1;
else
{
long poz=0;
drum[0]=i;
while(viz[drum[poz]]!=-1)
{
drum[++poz]=viz[drum[poz-1]];
nr++;
}
r[i]=nr;
}
}
}
main()
{
fin=fopen("bfs.in","r");
fout=fopen("bfs.out","w");
citire();
parcurg(s);
for(int i=1;i<=n;i++)
fprintf(fout,"%d ",r[i]);
fclose(fin);
fclose(fout);
}