Cod sursa(job #351425)

Utilizator johsonsbabiJohnsons Babi Minune johsonsbabi Data 28 septembrie 2009 00:40:59
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <stdio.h>
#include <vector>
#define max 100005
using namespace std;

FILE*f=fopen("bfs.in","r");
FILE*g=fopen("bfs.out","w");

int i,n,m,u,p,s,nod,nod2,c[max],pasi[max],lungime[max];
vector <int> mat[max];

void citire(){
	fscanf(f,"%d %d %d",&n,&m,&s);
	for(i=0;i<m;i++){
		fscanf(f,"%d %d",&nod,&nod2);
		mat[nod].push_back(nod2);
	}
}

void bfs(){
	for(i=1;i<=n;i++){
		lungime[i] = mat[i].size();
	}
	memset(pasi, -1, sizeof(pasi));
	p=u=1;
	c[1]=s;
	pasi[s]=0;
	while(p<=u){
		nod = c[p];
		for(i=0;i<lungime[nod];i++){
			if(pasi[mat[nod][i]] == -1){
				u++;
				c[u] = mat[nod][i];
				pasi[mat[nod][i]] = pasi[nod]+1;
			}
		}
		p++;
	}
}

void afis(){
	for(i=1;i<=n;i++){
		fprintf(g,"%d ",pasi[i]);
	}
}

int main(){
	
	citire();
	bfs();
	afis();
	
	fclose(f);
	fclose(g);
	return 0;
}