Cod sursa(job #294769)

Utilizator spidyvenomMarius Toma spidyvenom Data 2 aprilie 2009 19:11:52
Problema BFS - Parcurgere in latime Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include<fstream.h>
#define nmax 100001
int s,n,m,i,v[nmax],cd[nmax],lg[nmax];
ifstream f("bfs.in");
ofstream g("bfs.out");
struct nod
	{int z;
	nod *adr;};
nod *l[nmax];
void citire()
{
nod *c;
int i,j;
for (i=1;i<=m;i++) l[i]=NULL;
while (f>>i>>j)
	{
	c=new nod;
	c->z=j;
	c->adr=l[i];
	l[i]=c;
	}
}
void bfs(int x)
{
nod *c;
int z,p,u;
p=u=1;
v[x]=1;
cd[p]=x;
for (lg[x]=0;p<=u;p++)
	{
	z=cd[p];
	for (c=l[z];c!=NULL;c=c->adr)
		if (!v[c->z])
			{
			v[cd[++u]=c->z]=1;
			lg[c->z]=lg[z]+1;
			//t[c->z]=z;
			}
	}
}


int main()
{
memset(lg,-1,sizeof(lg));
f>>n>>m>>s;
nod *c;
lg[s]=0;
citire();
/*for (i=1;i<=n;i++)
	{cout<<"L"<<i<<":";
	c=l[i];
	while(c) {cout<<c->z<<" ";
				c=c->adr;}
	cout<<'\n';
	} */
bfs(s);
for (i=1;i<=n;i++) g<<lg[i]<<" ";
g.close();
return 0;
}