Cod sursa(job #633394)

Utilizator Marius_mFMI-M2 Marius Melemciuc Marius_m Data 13 noiembrie 2011 18:28:02
Problema BFS - Parcurgere in latime Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include<stdio.h>
#include<vector>
#include<queue>

using namespace std;

vector<long int> a[100001];
long int viz[500001];

long int n,m;

long int distanta_varfuri(long int v1,long int v2)
{	queue<long int> c;
	long int primul,j;
	c.push(v1);
	for(j=1;j<=n;j++)
		viz[j]=-1;
	viz[v1]=0;
	while(c.size()!=0)	{
		primul=c.front();
		for(j=0;j<a[primul].size();j++)
			if(viz[a[primul][j]]==-1)	{
				c.push(a[primul][j]);
				viz[a[primul][j]]=viz[primul]+1;
				if(a[primul][j]==v2)	
					return viz[a[primul][j]];	
			}
		c.pop();
	}
	return viz[v2];
}

int main()
{	long int i,x,y,s;
	FILE *f,*g;
	f=fopen("bfs.in","r");
	g=fopen("bfs.out","w");
	fscanf(f,"%ld %ld %ld",&n,&m,&s);
	for(i=1;i<=m;i++)	{
		fscanf(f,"%ld %ld",&x,&y);
		a[x].push_back(y);
	}
	for(i=1;i<=n;i++)
		fprintf(g,"%ld ",distanta_varfuri(s,i));
	fclose(f);
	fclose(g);
	return 0;
}