Cod sursa(job #829791)

Utilizator Kira96Denis Mita Kira96 Data 5 decembrie 2012 20:59:39
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include<fstream>
#include<string.h>
using namespace std;
ifstream f("bfs.in");
ofstream g("bfs.out");
struct nod
{
	int inf;
	nod *adr;
}*l[100100];
int k,n,m,x,y,tail[100100],d[100100],rank[100100];
bool viz[100100];
void create (int a,int b)
{
	nod *c=new nod;
	c->adr=l[a];
	c->inf=b;
	l[a]=c;
}
void bfs()
{
	nod *c;
	bool OK;
	int p,u,i;
	for(int i=1;i<=n;++i)
		d[i]=-1;
	i=k;
	d[i]=0;
		c=l[i];
		tail[1]=i;
		rank[1]=0;
		p=u=1;
		while(p<=u)
		{
			c=l[tail[p]];
			while(c!=NULL)
			{
				if(viz[c->inf]==0)
				{
					viz[c->inf]=1;
					tail[++u]=c->inf;
					rank[u]=rank[p]+1;
					d[c->inf]=rank[u];
				}
				c=c->adr;
			}
			p++;
		}
	d[k]=0;
	for(i=1;i<=n;++i)
		g<<d[i]<<" ";
}
int main ()
{
	f>>n>>m>>k;
	for(int i=1;i<=m;++i)
	{
		f>>x>>y;
		if(x!=y)
		create(x,y);
	}
	bfs();
	return 0;
}