Cod sursa(job #601379)

Utilizator Dana_2011D.M.Florescu Dana_2011 Data 6 iulie 2011 10:59:14
Problema BFS - Parcurgere in latime Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include<stdio.h>
#include<fstream.h>
ifstream f("bfs.in");
ofstream g("bfs.out");
typedef struct nod{
	int nr;
	nod *ante;
};
nod *p,*l[100001];
int v[100001],c[100001],ic,sc,k=0,a[100001],cond;
long n,m,s,i,j;
int bf(){
	nod *q;
	
	k++;
	while(ic<=sc){
	   q=l[c[ic]];
	   while(q){
		   if(!v[q->nr]){
			   sc++;
			   c[sc]=q->nr;
			   v[q->nr]=1;
			  
			   if(a[q->nr]==0)
			    a[q->nr]=k;
	      }
		  
		   q=q->ante;
	   }
	   ic++;
	   bf();
	}
	return 0;
}
int main(){
	f>>n>>m>>s;
	while(f>>i>>j){
		p=new nod;
		if(i!=j){
		  p->nr=j;
		  p->ante=l[i];
		  l[i]=p;
		}
		if((i==j)&&(i==s)) cond=1;
	}
	ic=1;sc=1;
	c[1]=s;
	v[s]=1;
	a[s]=0;
	
	bf();
	//for(i=1;i<=n;i++) printf("%d ",c[i]);
	for(i=1;i<=n;i++){
		if((a[i]==0)&&(i!=s)) g<<("-1 ");
		else {
			if((i==s)&&(!cond)) g<<("-1");
			else
			g<<a[i]<<' ';
		}
	}
	g<<"\n";
	f.close();
	g.close();
		return 0;
}