Cod sursa(job #398647)

Utilizator maditzaaciuca madalina maditzaa Data 19 februarie 2010 09:13:22
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include <iostream.h>
#include <fstream.h>
#define DIM 100001
//char a[DIM][DIM];

struct nod{
	int inf;
	nod *adr;
};

nod *P[DIM], *q;

int c[DIM];
char viz[DIM];
int D[DIM];

int n,m,i,j,p,u,s;

ifstream f("bfs.in");
ofstream g("bfs.out");



void citire(){
	int i,j,k;
	f>>n>>m>>s;
	for (k = 1; k<=m; k++) {
		f>>i>>j;
		q = new nod;
		q->inf = j;
		q->adr = P[i];
		P[i] = q;
		//a[i][j]=1;
	}
}
void bf(){
	int p,x,u;
	p=u=1;
	c[p]=s;
	viz[s]=1;
	while(p<=u){
		q = P[c[p]];
		while (q!=NULL) {
			i = q->inf;
			if(!viz[i]){
				c[++u]=i;
				viz[i]=1;
				D[i] = D[c[p]] + 1;
			}
			
			q = q->adr;
		}
		p++;
	}
}

int main(){
	citire();
	bf();
	for (i=1;i<=n;i++)
		if (viz[i] == 0)
			g<<-1<<" ";
		else
			g<<D[i]<<" ";
	g.close();
	f.close();
	return 0;
}