Cod sursa(job #749637)

Utilizator Marius96Marius Gavrilescu Marius96 Data 17 mai 2012 21:39:41
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include<cstdio>
#include<vector>
#include<queue>
using std::queue;
using std::vector;

struct str
{
	int n,v;
	str()
		{
			n=v=0;
		}
	str (int nn,int vv)
		{
			n=nn;
			v=vv;
		}
};

vector<int> v[100005];
bool        p[100005];
int         r[100005];

int main()
{
	freopen ("bfs.in","r",stdin);
	freopen ("bfs.out","w",stdout);
	int n,m,s;
	scanf ("%d%d%d",&n,&m,&s);
	while(m--){
		int x,y;
		scanf ("%d%d",&x,&y);
		v[x].push_back (y);
	}
	for(int i=1;i<=n;i++)
		r[i]=-1;

	queue<str> q;
	q.push (str (s,0));
	p[s]=1;
	while(!q.empty ()){
		str s=q.front();
		q.pop();
		int x=s.n;
		int y=s.v;
		r[x]=y;
		for(vector<int>::iterator it=v[x].begin();it!=v[x].end();it++)
			if(!p[*it]){
				p[*it]=1;
				q.push (str (*it,y+1));
			}
	}

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