Cod sursa(job #255809)

Utilizator mihnea_andreiMihnea Andrei mihnea_andrei Data 10 februarie 2009 18:18:15
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include<fstream> 
#include<iostream>
#define b 100010 

using namespace std; 

int d[b],n,m,s,*a[b];
 
ofstream out ("bfs.out"); 

void citire () 
{
	ifstream in ("bfs.in");
	int x,y;
	in>>n>>m>>s; 
	while (m--) 
	{
		in>>x>>y; 
		d[x]++;
	} 
	in.close (); 
	for(int i=1;i<=n;i++) 
	{ 
		a[i]=new int[1+d[i]]; 
		a[i][0]=0;
	}
	ifstream in2("bfs.in"); 
	in2>>n>>m>>s;
	while (m--) 
	{
		in2>>x>>y; 
		a[x][++a[x][0]]=y; 
	}
	in2.close (); 
}
/*
void verificare ()
{
	for(int i=1;i<=n;i++)
	{
		cout<<"vecinii lui "<<i<<": ";
		for(int j=1;j<=a[i][0];j++) 
			cout<<a[i][j]<<" ";
		cout<<endl;
	}
}
*/
void bfs (int x0) 
{ 
	int p=0,u=0,i,x,y,coada[b],pred[b]; 
	for(i=1;i<=n;i++) 
		d[i]=-1; 
	coada[u++]=x0; 
	d[x0]=0; 
	pred[x0]=0;
	while(p!=u) 
	{ 
		x=coada[p++]; 
		for(i=1;i<=a[x][0];i++) 
		{
			y=a[x][i]; 
			if(d[y]==-1) 
			{
				coada[u++]=y; 
				d[y]=1+d[x]; 
				pred[y]=x; 
			}
		}
	}
}  

void afisare ()
{
	for(int i=1;i<=n;i++) 
		out<<d[i]<<" "; 	
}

int main ()
{ 
	citire ();
	//verificare();
	bfs (s); 
	afisare (); 
	out.close ();
	return 0;
}