Cod sursa(job #601823)

Utilizator soriynSorin Rita soriyn Data 7 iulie 2011 22:59:25
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include<cstdio>
#include<vector>

#define maxn 100010
using namespace std;

vector <int> A[maxn];
int Cost[maxn],Grad[maxn],C[maxn];
int n,m,l,start;


void bfs(int nod)
{
	int i,j;
	memset(Cost, -1, sizeof(Cost));
	Cost[nod]=0;
	l=1;
	C[l]=nod;
	
	for(i=1;i<=l;i++)
	  for(j=0;j<Grad[C[i]];j++)
		  if(Cost[A[C[i]][j]]==-1)
		  {
			  C[++l]=A[C[i]][j];
			  Cost[C[l]]=Cost[C[i]]+1;
		  }
}


int main()
{
	freopen("bfs.in","r",stdin);
	freopen("bfs.out","w",stdout);
	int x,y;
	scanf("%d %d %d\n",&n,&m,&start);
	
	for(int i=1;i<=m;i++)
	{
		scanf("%d %d",&x,&y);
		A[x].push_back(y);
	}
	for(int i=1;i<=n;i++)
		Grad[i]=A[i].size();
	bfs(start);
	for(int i=1;i<=n;i++)
		printf("%d ",Cost[i]);
}