Cod sursa(job #492034)

Utilizator andrey932Andrei andrey932 Data 13 octombrie 2010 11:36:25
Problema BFS - Parcurgere in latime Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <iostream>
#include <stdio.h>
#include <queue>
#include <list>

#define MAXN 100001
using namespace std;
typedef list<int> nod;
nod graf[MAXN];
int rez[MAXN];
int n,m,s,i,a,b,poz,aux;
queue<int> q;
FILE *fin=fopen("bfs.in","r"), *fout=fopen("bfs.out","w");

void BFS() {
	aux=s;
	poz=0;
	q.push(aux);
	rez[s]=0;
	while (!q.empty()) {
		//cout<<q.front().val<<"\n";
		a=q.front();		
		poz=rez[a]+1;
		q.pop();		
		while (!graf[a].empty()) {
			if (rez[graf[a].back()]==-1) {
				aux=graf[a].back();
				q.push(aux);
				rez[aux]=poz;
			}
			graf[a].pop_back();
		}
		
	}
}


int main()
{
	fscanf(fin,"%i %i %i	",&n,&m,&s);
	for(i=1;i<=m;i++) {
		fscanf(fin,"%i %i",&a,&b);
		graf[a].push_back(b);
	}
	for(i=1;i<=n;i++) rez[i]=-1;
	BFS();
	rez[s]=0;
	for(i=1;i<=n;i++) {
		fprintf(fout,"%i ",rez[i]);
	}
	fclose(fout);
	
	return 0;
}