Cod sursa(job #896155)

Utilizator noruIlies Norbert noru Data 27 februarie 2013 14:04:49
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include<fstream>
using namespace std;
ifstream f("bfs.in");
ofstream g("bfs.out");
int k,n,m,viz[100001],x;
typedef struct nod {nod *urm; int la;}NOD;
NOD *p[100001];
void add(int x, int y)
{
	nod *q=new nod;
	q->la=y;
	q->urm=p[x];
	p[x]=q;
}
void citire()
{
	f>>n>>m>>x;
	for (int i=1;i<=m;i++)
	{
		int x,y;
		f>>x>>y;
		add(x,y);
	}
}
int INF=99999999;
int r;
int dist[100001];
void bfs(int i)
{
	dist[i]=0;
	viz[i]=1;
	nod *st, *dr;
	st=dr=new nod;
	st->la=i;
	st->urm=NULL;
	while (st)
	{
		int i=st->la;
		for (nod *q=p[i];q;q=q->urm)
		{
			int j=q->la;
			if (dist[j]>dist[i]+1) 
				dist[j]=dist[i]+1;
			if (viz[j]==0)
			{
				viz[j]=1;
				nod *t=new nod;
                t->la=j;
                t->urm=NULL;
                dr->urm=t;
                dr=dr->urm;
			}
		}
		nod *t=new nod;
		t=st;
		st=st->urm;
		delete t;
	}
}
int main()
{
	citire();
	for (int i=1;i<=n;i++)
		dist[i]=INF;
	bfs(x);
	for (int i=1;i<=n;i++)
		if (dist[i]==INF) g<<-1<<' ';
	else g<<dist[i]<<' ';
	return 0;
}