Pagini recente » Cod sursa (job #3224366) | Cod sursa (job #3258876) | Cod sursa (job #2021612) | Profil usureluflorian | Cod sursa (job #246869)
Cod sursa(job #246869)
#include <iostream.h>
#include <fstream.h>
#define IN "bfl.in"
#define OUT "bfl.out"
#define maxx 101
ifstream fin(IN);
ofstream fout(OUT);
struct nod
{
int info;
nod *urm;
}*l[maxx];
int n,m;
int nd;
int timp;
int t[maxx],d[maxx],c[maxx];
char u[maxx];
int zz;
void citire();
void afis();
void bf(int k);
void add(int x,int y);
int main()
{
citire();
fin.close();
bf(nd);
afis();
fout.close();
return 0;
}
void citire()
{
int i;
int x,y;
fin>>n>>m>>nd;
for(i=1;i<=m;i++)
{
fin>>x>>y;
add(x,y);
}
}
void afis()
{
int i,j;
nod *q;
/*for(i=1;i<=n;i++)
{
q=l[i];
fout<<i<<" ";
while(q)
{
fout<<q->info<<" ";
q=q->urm;
}
fout<<endl;
}
*/
for(i=1;i<=n;i++)
if(i==nd)
fout<<"0 ";
else
if(d[i]==0)
fout<<"-1 ";
else
fout<<d[i]<<" ";
}
void add(int x,int y)
{
nod *q;
q=new nod;
q->info=y;
q->urm=l[x];
l[x]=q;
}
void bf(int k)
{
nod *p;
int inf,st,dr;
memset(u,0,sizeof(u));
st=dr=1;
c[st]=k;
u[k]=1;
for(d[k]=0;st<=dr;st++)
{
inf=c[st];
for(p=l[inf];p!=NULL;p=p->urm)
if(!u[p->info])
{
u[c[++dr] = p->info]=1;
d[p->info]=d[inf]+1;
t[p->info]=inf;
}
}
zz=dr;
}