Cod sursa(job #755358)

Utilizator rughibemBelcineanu Alexandru Ioan rughibem Data 5 iunie 2012 15:10:25
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include<cstdio>
#include<vector>
FILE *f=fopen("bfs.in","r"), *g=fopen("bfs.out","w");
using namespace std;

long int n, m, s, x, y, queue[100002], p, u, used[100002], min2[100002];
vector<int> a[100100];

void dfs(){
long int i;
	queue[1]=s;
	used[s]=1;
	p=1; u=1;
	min2[s]=0;
	while(p<=u){
		
		for(i=1;i<=a[queue[p]][0];i++){
			
			if(used[a[queue[p]][i]]==0){
				u++; queue[u]=a[queue[p]][i]; min2[ queue[u] ]=min2[ queue[p] ]+1; used[queue[u]]=1;
			}
			
		}
		p++;
		
	}

}

int main(){

	fscanf(f,"%ld %ld %ld\n",&n,&m,&s);
	
	for(int i=1;i<=n;++i) a[i].push_back(0);
	
	for(long int i=1;i<=m;i++){
		fscanf(f,"%ld %ld\n",&x,&y);
		a[x].push_back(y);
	}
	
	for(int i=1;i<=n;++i)
	{
		int var=a[i].size()-1;
		a[i][0]=var;
	}
	
	dfs();
	
	for(long int i=1;i<=n;i++){
		if(used[i]==0){fprintf(g,"-1 ");}
		else
		fprintf(g,"%ld ",min2[i]);
	}
	
	
return 0;
}