Cod sursa(job #793574)

Utilizator SebiSebiPirtoaca George Sebastian SebiSebi Data 3 octombrie 2012 15:53:12
Problema BFS - Parcurgere in latime Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include<stdio.h>
#include<stdlib.h>
using namespace std;
#define NMAX 100001
int cost[NMAX],l[NMAX],c[NMAX],*v[NMAX],n;
inline void bfs(int nod)
{
	int i,st,dr;
	for(i=1;i<=n;i++)
		cost[i]=-1;
	st=1;
	dr=1;
	c[st]=nod;
	cost[nod]=0;
	while(st<=dr) {
		for(i=1;i<=l[c[st]];i++) 
			if(cost[v[c[st]][i]]==-1) {
				cost[v[c[st]][i]]=cost[c[st]]+1;
				c[++dr]=v[c[st]][i];
			}
		st++;
	}
}
int main ()
{
	int m,i,x,y,s;
	freopen("bfs.in","r",stdin);
	freopen("bfs.out","w",stdout);
	scanf("%d %d %d",&n,&m,&s);
	for(i=1;i<=m;i++) {
		scanf("%d %d",&x,&y);
		l[x]++;
		l[y]++;
	}
	for(i=1;i<=n;i++) {
		v[i]=new int(l[i]+1);
		l[i]=0;
	}
	fseek(stdin,0,SEEK_SET);
	scanf("%d %d %d",&n,&m,&s);
	for(i=1;i<=m;i++) {
		scanf("%d %d",&x,&y);
		v[x][++l[x]]=y;
	}
	fclose(stdin);
	bfs(s);
	for(i=1;i<=n;i++)
		printf("%d ",cost[i]);
	fclose(stdout);
	return 0;
}