Pagini recente » Cod sursa (job #1378718) | Cod sursa (job #758299) | Cod sursa (job #2670085) | Cod sursa (job #2335247) | Cod sursa (job #324866)
Cod sursa(job #324866)
#include <fstream.h>
#define MaxN 100009
#define MaxM 1000009
int n,m,S,T[2][2*MaxM],a[MaxN],ok[MaxN],sw,tr[MaxN];
void add(int x,int y,int &st)
{
T[0][st]=y;
T[1][st]=a[x];
a[x]=st;
st++;
}
void cit()
{
int i,st=1,x,y;
ifstream fin("bfs.in");
fin>>n>>m>>S;
for(i=1;i<=m;i++)
{
fin>>x>>y;
add(x,y,st);
}
fin.close();
}
void BF(int nod,int x)
{
int p,c[MaxN],st=1,dr=1;
ok[nod]=1;
c[st]=nod;
tr[nod]=0;
while(st<=dr && !sw)
{
p=a[c[st]];
while(p && !sw)
{
if(!ok[T[0][p]] || T[0][p]==x)
{
dr++;
c[dr]=T[0][p];
ok[T[0][p]]=1;
tr[T[0][p]]=c[st];
if(T[0][p]==x)
sw=1;
}
p=T[1][p];
}
st++;
}
}
int main()
{
cit();
ofstream fout("bfs.out");
for(int i=1;i<=n;i++)
{
sw=0;
BF(S,i);
if(!sw)
fout<<"-1 ";
else
if(i==S)
fout<<"0 ";
else
{
int p=tr[i],nr=0;
while(p)
{
p=tr[p];
nr++;
}
fout<<nr<<' ';
for(int j=1;j<=n;j++)
tr[j]=0;
}
for(int j=1;j<=n;j++)
ok[j]=0;
}
fout.close();
return 0;
}