Cod sursa(job #492015)

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

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

void BFS() {
	aux.val=s;
	aux.poz=0;
	q.push(aux);
	while (!q.empty()) {
		a=q.front().val;		
		aux.poz=q.front().poz+1;
		q.pop();		
		while (!graf[a].empty()) {
			if (rez[graf[a].front()]==-1) {
				aux.val=graf[a].front();			
				q.push(aux);
				rez[aux.val]=aux.poz;
			}
			graf[a].pop_front();
		}
		
	}
}


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_front(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;
}