Cod sursa(job #1869589)

Utilizator igroitaGroita Igor igroita Data 5 februarie 2017 23:39:38
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include<fstream>
using namespace std;

ifstream cin("bfs.in");
ofstream cout("bfs.out");

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

int n, st;
long m;
nod *l[100005], *p, *v;
int viz[100005];

void coadainser(int x){
	nod *r; r=new nod; r->val=x; r->next=NULL;
	if(!p) p=r, v=r;
	else{v->next=r; v=r;}
}
int coadaextrag(){
	nod *r; r=p;
	p=p->next;
	int x = r->val;
	delete r;
	return x;
}

void add(int x, int y){
	nod *r; r=new nod; r->val=y; r->next=NULL;
	if(!l[x]) l[x]=r;
	else{	r->next=l[x];	l[x]=r;			}
}
void bfs(){
	while(p){
		int nd = coadaextrag();
		nod *r; r=l[nd];
		while(r){
			if(!viz[r->val]){ viz[r->val]=viz[nd]+1;
			coadainser(r->val);}
			r=r->next; 
		}
	}
}

int main(){
	cin>>n>>m>>st;
	
	while(m--){
		int x, y;
		cin>>x>>y;
		add(x, y);
	}
	coadainser(st); viz[st]=1;
	bfs();

for(int i=1; i<=n; ++i){
		if(viz[i]==0) cout<<-1<<"  ";
		else cout<<viz[i]-1<<"  ";
}
	
	return 0;
}