Cod sursa(job #538473)

Utilizator worstbyteelev gigel worstbyte Data 21 februarie 2011 15:43:27
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include<fstream>

using namespace std;
#define M	1000001
#define N	100001
ifstream in("bfs.in");
ofstream out("bfs.out");

int n,m,c[N],viz[N],li=1,ls,d[N],start;

struct nod{
	int x;
	nod* next;
};

nod* v[N];

void add(nod* &l, int x){
	nod* nn=new nod;
	nn->x=x;
	nn->next=l;
	l=nn;
}

int c_vida(){
	return ls<li;
}

void pune(int x){
	c[++ls]=x;
}

void scoate(int &x){
	x=c[li++];
}

void bf(int start){
	nod* nc;
	int x,y;
	pune(start);
	viz[start]=1;
	while(!c_vida()){
		scoate(x);
		nc=v[x];
		while(nc){
			y=nc->x;
			if(!viz[y]){
				pune(y);
				d[y]=d[x]+1;
				viz[y]=1;
			}
			nc=nc->next;
		}
	}
}

void build(){
	int i,x,y;
	in>>n>>m>>start;
	for(i=0;i<m;++i){
		in>>x>>y;
		add(v[x],y);
		//add(v[y],x);
	}
}

int main(){
	int i;
	build();
	bf(start);
	for(i=1;i<=n;++i){
		if(d[i]==0&&i!=start)
			d[i]=-1;
		out<<d[i]<<" ";
	}
	return 0;
}