Cod sursa(job #278281)

Utilizator stefysStefan stefys Data 12 martie 2009 10:52:41
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>
using namespace std;

struct Nod {
	unsigned int dest;
	Nod *n;
};
Nod *graf[100001];
unsigned int N,M,S;

void BFS (unsigned int src, int dist[100001])
{
	unsigned int queue[100001],*Q_push=queue,*Q_pop=queue;
	char visited[100001]; memset(visited,0, sizeof(visited));
	*(Q_push++) = src;
	visited[src] = 1;
	dist[src] = 0;
	while (Q_pop < Q_push) {
		unsigned int crt = *(Q_pop++);
		for (Nod *nod=graf[crt]; nod; nod=nod->n)
			if (!visited[nod->dest]) {
				dist[nod->dest] = dist[crt]+1;
				*(Q_push++) = nod->dest;
				visited[nod->dest] = 1;
			}
	}
}

int main ()
{
	unsigned int i;
	ifstream in("bfs.in");
	ofstream out("bfs.out");
	in >> N >> M >> S;
	for (i=0; i<M; ++i) {
		unsigned int src;
		Nod *nod = new Nod;
		in >> src >> nod->dest;
		nod->n = graf[src];
		graf[src] = nod;
	}
	in.close();
	
	int dist[100001];
	for (i=1; i<=N; ++i) dist[i] = -1;
	BFS(S, dist);
	for (i=1; i<=N; ++i) out << dist[i] << ' ';
	out << '\n';
	
	out.close();
	return 0;
}