Cod sursa(job #885377)

Utilizator b_ady20Branescu Adrian b_ady20 Data 21 februarie 2013 21:40:26
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include<fstream>
#include<queue>
using namespace std;
fstream f,g;
class node{
public:
	int info;
	node* next;
	node(){
		info=0;
		next=NULL;
	}
	~node(){
		delete next;
	}
};
class list: public node {
public:
	node* first;
	list(): node(){
		first=new node;
	}
	void insert(int);
	~list(){
		delete first;
	}
};
void list::insert(int y){
	node* p=first;
	if(first->info){
		while(p->next) p=p->next;
		node* q=new node;
		p->next=q;
		q->info=y;
	}
	else
		first->info=y;
}		
queue<int> coada;
list v[6];
int viz[6]={0},cont[6]={0};
void af(){
	queue<int> coada2;
	coada2=coada;
	for(;!coada2.empty();coada2.pop())
		g<<coada2.front()<<" ";
	g<<endl;
}
void bfs(node* p,int a){
	int aux;
	for(;p;p=p->next)
		if(!viz[p->info]){
			coada.push(p->info);
			cont[p->info]=cont[a]+1;
		}
	if(coada.empty()) return;
	//af();
	while(!coada.empty()&&viz[coada.front()]) coada.pop();
	aux=coada.front();
	if(!viz[aux]){
		viz[aux]=1;
		coada.pop();
		bfs(v[aux].first,aux);
	}
}
int main(){
	int n,m,s,i,x,y;
	f.open("bfs.in",ios::in);
	g.open("bfs.out",ios::out);
	f>>n>>m>>s;
	for(i=0;i<m;++i){
		f>>x>>y;
		if(x!=y)
			v[x].insert(y);
	}
	viz[s]=1;
	coada.push(s);
	bfs(v[s].first,s);
	for(i=1;i<=n;++i)
		if(!viz[i]) g<<"-1 ";
		else g<<cont[i]<<" ";
	g<<"\n";
	return 0;
}