Cod sursa(job #1847862)

Utilizator igroitaGroita Igor igroita Data 15 ianuarie 2017 10:22:36
Problema BFS - Parcurgere in latime Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include<fstream>

using namespace std;

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

int n, m, st, c[40000], p, u, drum[40000],  k=0, init;
bool a[40000][40000], viz[40000];

void bfs(){
	while(p<=u){
		st=c[p];
		
		for(int i=1; i<=n; ++i){
			if(a[st][i]==1 && viz[i]==0){
				++u; c[u]=i; drum[i]=drum[st]+1;
				viz[i]=1;
			}
		}
		++p;
	}
}

int main(){
	cin>>n>>m>>st;
	
	while(m--){
		int x, y;
		cin>>x>>y;
		a[x][y]=1;
	}
	
/*	cout<<"Matricea de adiacenta:\n";
	for(int i=1; i<=n; ++i){
			for(int j=1; j<=n; ++j){
				cout<<a[i][j]<<"  ";
			}
		cout<<"\n";
}*/
	
	p=u=1; init=st;
	c[p]=st; viz[st]=1; drum[st]=0;
	bfs();
	
//	for(int i=1; i<=n; ++i) cout<<c[i]<<"  ";
	for(int i=1; i<=n; ++i){
	if(drum[i]==0 && i!= init) drum[i]=-1;
	cout<<drum[i]<<"  ";
}

	

	
	return 0;
}