Cod sursa(job #280561)

Utilizator Andrei_ScorpioAndreiana Andrei Daniel Andrei_Scorpio Data 13 martie 2009 14:10:53
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include<fstream.h>
#define Nmax 100100
ifstream f("bfs.in");
ofstream g("bfs.out");

int s,n,m,viz[Nmax];

struct coada
{
int inf;
coada *urm;
}*c;

struct elem
{
int inf;
elem *urm;
}*a[Nmax];

void citire()
{
 elem *p;
 int x,y,i;
 f>>n>>m>>s;
 for(i=1;i<=m;i++)
 {
	f>>x>>y;
	p=new elem;
	p->inf=y;
	p->urm=a[x];
	a[x]=p;
 }
}

void program()
{

 elem *p;
 viz[s]=0;
 coada *ultim,*q;
 c=new coada;
 viz[s]=0;
 c->inf=s;
 c->urm=NULL;
 ultim=c;
 while(c!=NULL)
 {
	p=a[c->inf];
	while(p)
	{
		if(viz[p->inf]==0 && p->inf!=s)
		{
		viz[p->inf]=viz[c->inf]+1;
		q=new coada;
		q->inf=p->inf;
		q->urm=NULL;
		ultim->urm=q;
		ultim=q;
		}
		p=p->urm;
	}
	c=c->urm;
 }
}

void afisare()
{
 for(long i=1;i<=n;i++)
 {	if(viz[i]!=0 || i==s)
		g<<viz[i]<<' ';
	else
		g<<-1<<' ';
 }
 g<<'\n';
}

int main()
{
 citire();
 program();
 afisare();
 g.close();
 return 0;
}