Cod sursa(job #640215)

Utilizator horeste12Stoianovici Horatiu Andrei horeste12 Data 24 noiembrie 2011 22:25:25
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include<fstream>
using namespace std;

ifstream f("bfs.in");
ofstream g("bfs.out");

typedef struct nod
{
	int inf;
	nod *urm;
} NOD;
typedef NOD *graf[100010];
graf G;

NOD *c,*p;
int n,m,s,viz[100010];

void citire()
{
	f>>n>>m>>s;
	int a,b;
	for(int i=1;i<=m;i++)
	{
		f>>a>>b;
		p=new NOD;
		p->inf=b;
		p->urm=G[a];
		G[a]=p;
	}
	f.close();
}

void dfs(int x)
{
	c=new NOD;
	c->inf=x;c->urm=NULL;
	viz[x]=1;
	p=c;
	while(p)
	{
		NOD *q=G[p->inf];
		while(q)
		{
			if(!viz[q->inf])
			{
				NOD *r=new NOD;
				r->inf=q->inf;
				c->urm=r;
				r->urm=NULL;
				c=r;
				viz[q->inf]=viz[p->inf]+1;
			}
			q=q->urm;
		}
		p=p->urm;
	}
}

void afis()
{
	for(int i=1;i<=n;i++)
		if(viz[i]>1||i==s)
			g<<viz[i]-1<<" ";
		else
			g<<"-1 ";
	g<<endl;
	g.close();
}

int main()
{
	citire();
	dfs(s);
	afis();
	return 0;
}