Cod sursa(job #612891)

Utilizator sergiupPopescu Sergiu sergiup Data 12 septembrie 2011 18:27:15
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <stdio.h>
#include <vector>
#include <queue>

using namespace std;

#define MAXN 100005

vector<int> g[MAXN];

int viz[MAXN];

void bfs(int nod)
{
	queue<int> q;
	q.push(nod);
	viz[nod] = 1;

	int assignval;

	while (!q.empty())
	{
		int tmp = q.front();

		assignval = viz[tmp] + 1;

		for (int i = 0 ; i < g[tmp].size(); ++i)
			if (!viz[g[tmp][i]])
			{
				viz[g[tmp][i]] = assignval;
				q.push(g[tmp][i]);
			}
		q.pop();
	}
}

int main()
{
	freopen("bfs.in","r",stdin);
	freopen("bfs.out","w",stdout);

	int n,m,x,y,s;
	scanf("%d%d%d",&n,&m,&s);
	for ( int i = 0 ; i < m ; ++i)
	{
		scanf("%d%d",&x,&y);
		g[x].push_back(y);
	}
	bfs(s);

	for (int i = 1 ; i <= n ; ++i)
	{
		printf("%d ",viz[i] - 1);
	}
	return 0;
}