Cod sursa(job #904838)

Utilizator PregatireONIAnamaria Cotirlea PregatireONI Data 4 martie 2013 21:31:51
Problema BFS - Parcurgere in latime Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <stdio.h>
#include <vector>
#include <queue>

using namespace std;

FILE *f,*s;

int m,n,p,i;

int nod;

vector <int> v[100000];

struct coada
{
	int x;
	int y;
};

coada nod1,nod2;

queue <coada> q;

int v1[100000],v2[100000];

void Solve()
{
	nod1.x=p;
	nod1.y=0;
	
	q.push(nod1);
	
	for (i=1;i<=n;i++) v1[i]=-1;
	
	v1[p]=0;
	v2[p]=1;
	
	while(!q.empty())
	{
		nod1=q.front();
		q.pop();
		
		for(int i=0;i<v[nod1.x].size();i++)
		{
			nod=v[nod1.x][i];
			
			if (!v2[nod])
            {
                v1[nod]=v1[nod1.x]+1;
                v2[nod]=1;
				
                nod2.x=nod;
                nod2.y=v1[nod];
                q.push(nod2);
            }
		}
	}
	
	for(int i=1;i<=n;i++) fprintf(s,"%d ",v1[i]);
}

int main()
{
	f=fopen("bfs.in","r");
	s=fopen("bfs.out","w");
	
	fscanf(f,"%d %d %d",&n,&m,&p);
	
	for(i=1;i<=m;i++)
	{
		int a,b;
		
		fscanf(f,"%d %d",&a,&b);
		
		v[a].push_back(b);
	}
	
	Solve();
	
	return 0;
}