Cod sursa(job #350272)

Utilizator bogdanacmDrutu Bogdan bogdanacm Data 23 septembrie 2009 11:17:59
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <cstdio>
#include <cstring>
#include <vector>

using namespace std;

#define pb push_back
#define NMAX 100005

vector <int> G[NMAX];
vector <int> queue;
int viz[NMAX],N,M,S,d[NMAX];

void bfs(int t)
{
	int i,k,p=0;
	
	for (i=1;i<=N;i++)
		d[i]=-1;
	
	queue.pb(t);
	d[t] = 0;
	viz[t] = 1;

	while (p<queue.size())
	{
		k = queue[p];
		for ( i = 0 ; i < G[k].size() ; i++)
			if (!viz[G[k][i]])
			{
				queue.pb(G[k][i]);
				d[G[k][i]] = d[k] + 1;
				viz[G[k][i]] = 1;
			}

		p++;
	}
}

int main()
{
	int i,j,k=0,x,y;
	freopen("bfs.in", "rt", stdin);
	freopen("bfs.out", "wt", stdout);

	scanf("%d %d %d",&N,&M,&S);

	for (i=0;i<M;i++)
	{
		scanf("%d %d",&x,&y);
		G[x].pb(y);
//		G[y].pb(x);
	}

	bfs(S);

	for (i=1;i<=N;i++)
		printf("%d ",d[i]);

	printf("\n");
	return 0;
}