Cod sursa(job #235746)

Utilizator ada_sAda-Mihaela Solcan ada_s Data 25 decembrie 2008 17:56:29
Problema BFS - Parcurgere in latime Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <stdio.h>
const long NMAX=100010;
long n, m, s, i, d[NMAX], *a[NMAX], x[NMAX], y[NMAX], dist[NMAX];

void bfs(long s);

int main()
{
	freopen("bfs.in", "r", stdin);
	freopen("bfs.out", "w", stdout);
	scanf("%ld%ld%ld", &n, &m, &s);
	for (i=0; i<m; i++)
	{
		scanf("%ld%ld", &x[i], &y[i]);
		d[x[i]]++;
	}//for i
	for (i=1; i<=n; i++)
	{
		a[i]=new long[d[i]+1];
		a[i][0]=0;
	}//for i
	for (i=0; i<m; i++)
		a[x[i]][++a[x[i]][0]]=y[i];
	bfs(s);
	for (i=1; i<=n; i++)
		printf("%ld ", dist[i]);
	return 0;
}//main

void bfs(long s)
{
	long p=0, u=0, q[NMAX], t, xx;
	for (i=1; i<=n; i++)
		dist[i]=-1;
	q[u]=s;
	dist[s]=0;
	while (p<=u)
	{
		t=q[p];
		p++;
		for (i=1; i<=a[t][0]; i++)
		{
			xx=a[t][i];
			if (dist[xx]==-1)
			{
				dist[xx]=dist[t]+1;
				u++;
				q[u]=xx;
			}//if
		}//for i
	}//whle
}//bfs