Cod sursa(job #694598)

Utilizator iuli1505Parasca Iuliana iuli1505 Data 27 februarie 2012 22:05:02
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include<cstdio>
#include<vector>
#define nmax 100001
using namespace std;
vector<int> g[nmax];
int n,m,s,i,x,y,viz[nmax],c[nmax];
void citire()
{
	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);
		g[x].push_back(y);
	}
}
void bfs(int k)
{
	int p,u;
	viz[k]=0;
	p=u=1;
	c[p]=k;
	while(p<=u)
	{
		k=c[p++];
		for(vector<int>::iterator it=g[k].begin(); it!=g[k].end(); it++)
			if(viz[*it]==-1)
			{
				viz[*it]=viz[k]+1;
				c[++u]=*it;
			}
	}
}
int main()
{
	citire();
	for(i=1;i<=n;i++)
		viz[i]=-1;
	bfs(s);
	for(i=1;i<=n;i++)
		printf("%d ", viz[i]);
	return 0;
}