Cod sursa(job #682910)

Utilizator metalkittenGeorgiana Arhip metalkitten Data 19 februarie 2012 18:12:57
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include<cstdio>
#include<vector>

using namespace std;

#define nmax 100010

int n,m,L,start,i,x,y;
vector <int> a[nmax];
int g[nmax],s[nmax],cost[nmax];

void bfs(int nod);

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

void bfs(int nod)
{
	int i,j;
	for(i=1;i<=n;i++)
		cost[i]=-1;
	//memset(cost,-1,sizeof(cost));
	
	L=1;
	cost[nod]=0;
	s[L]=nod;
	for(i=1;i<=L;i++)
		for(j=0;j<g[s[i]];j++)
			if(cost[a[s[i]][j]]==-1)
			{
				s[++L]=a[s[i]][j];
				cost[s[L]]=cost[s[i]]+1;
			}
	
}