Cod sursa(job #272614)

Utilizator robertzelXXX XXX robertzel Data 7 martie 2009 15:23:51
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <stdio.h>
#define max 100111

typedef struct nod {int inf; nod *urm;};
nod *v[max];
int n,m,s,r[max],cp,cu,c[max];
int i;


void rezolva () {
	for (i=1; i<=n; i++)
	{
		r[i] = -1;
	}

	nod *p;
	int cp = cu = 0;
	c[0] = s;
	r[s] = 0;

	while (cp<=cu) {
		for (p = v[c[cp]]; p!=NULL; p = p->urm) {
			if (r[p->inf] == -1) {
				cu++;
				c[cu] = p->inf;
				r[p->inf] = r[c[cp]]+1;
			}
		}
		cp++;
	}

}

void add (int x, int y) {
	nod *p;
	p = new nod;
	p->inf = y;
	p->urm = v[x];
	v[x] = p;
}

void citeste () {
	int x,y;

	FILE * in = fopen("bfs.in", "r");

	fscanf(in, "%d %d %d", &n, &m, &s);

	for (i=0; i<m; i++) {
		fscanf(in, "%d %d", &x, &y);
		add(x,y);
	}


	fclose(in);
}

void scrie () {
	FILE * out = fopen("bfs.out", "w");

	for (i=1; i<=n; i++) {
		fprintf(out, "%d ", r[i]);
	}

	fclose(out);
}

int main () {
	citeste();
	rezolva();
	scrie();

	return 0;
}