Cod sursa(job #420508)

Utilizator nandoLicker Nandor nando Data 19 martie 2010 16:48:05
Problema BFS - Parcurgere in latime Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include <cstdio>
#include <vector>
#include <list>

using namespace std;

#define MAX 100005

FILE* fin=fopen("bfs.in","r");
FILE* fout=fopen("bfs.out","w");

vector<int>nod[MAX];
int dist[MAX],n,m,s;

void bfs(int beg){
	list<int> lst;
	lst.push_back(beg);
	dist[beg]=0;
	while(lst.size()>0){
		beg=lst.front();
		for(int i=0;i<nod[beg].size();i++){
			if(dist[nod[beg][i]]==-1){
				dist[nod[beg][i]]=dist[beg]+1;
				lst.push_back(nod[beg][i]);
			}
		}
		lst.pop_front();
	}
}

int main(){
	int x,y;
	fscanf(fin,"%d %d %d",&n,&m,&s);

	for(int i=0;i<m;i++){
		fscanf(fin,"%d %d",&x,&y);
		nod[x-1].push_back(y-1);
	}

	for(int i=0;i<n;i++)
		dist[i]=-1;

	bfs(s-1);

	for(int i=0;i<n;i++)
		fprintf(fout,"%d ",dist[i]);

	fclose(fin);
	fclose(fout);
	return 0;
}