Cod sursa(job #829768)

Utilizator predatorGigi Valoare predator Data 5 decembrie 2012 20:25:02
Problema BFS - Parcurgere in latime Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 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],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;
	for(register int i=1;i<=n;++i)
	{
		memset(tail,0,n);
		memset(viz,0,n);
		memset(rank,0,n);
		c=l[i];
		tail[1]=i;
		rank[1]=1;
		p=u=1;
		OK=0;
		if(i!=k)
		while(p<=u&&!OK)
		{
			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;
				}
				if(c->inf==k)
				{
					OK=1; break;
				}
				c=c->adr;
			}
			p++;
		}
		else
		{
			rank[u]=1;
			OK=1;
		}
		if(OK)
			g<<rank[u]-1<<" ";
		else
			g<<"-1"<<" ";
	}
}
int main ()
{
	f>>n>>m>>k;
	for(int i=1;i<=m;++i)
	{
		f>>x>>y;
		create(y,x);
	}
	bfs();
	return 0;
}