Cod sursa(job #372325)

Utilizator totiotot io totio Data 9 decembrie 2009 12:23:51
Problema BFS - Parcurgere in latime Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
using namespace std;

#include <fstream>
#include <iostream>

ifstream fin("bfs.in");
ofstream fout("bfs.out");

int *a[100005], n, S, *d;

void write(){
	for(int i=1;i<=n;i++)
		fout<<d[i]<<" ";
	delete[] d;
}

void bfs(){
	//a[i][0] = numarul de urmasi ai lui i
	//a[i][j] = un vecin al lui i
	int coada[10005],st=1,dr=1,k,i;
	for(int i=1 ; i<=n ; i++)
		*(d+i) = -1; // d[i]=-1;
	coada[1]=S; d[S]=0;
	while(st<=dr){
		k = coada[st++];
		for(i=1;i<=a[k][0]; ++i)
			if(d[a[k][i]]==-1){
				d[a[k][i]] = d[k] +1;
				coada[++dr] = a[k][i];
			}
	}
}

void read(){
	int m;
	fin>>n>>m>>S;
	d = new int[n+1];
	for(int i=1;i<=n;i++)
		d[i] = 0;
	int i,j;
	for ( ;  m ;--m)
	{
		fin>>i>>j;
		d[i]++;
	}
	fin.close();
	fin.open("bfs.in");
	fin>>n>>m>>S;
	for(i=1;i<=n;i++){
		a[i] = new int[d[i]+1];
		a[i][0]=0;
	}
	for( ; m ; --m){
		fin>>i>>j;
		a[i][++a[i][0]] = j;
	}
}

void afis(){
	for(int i=1;i<=n;i++){
		cout<<i<<" : ";
		for(int j =1;j<=a[i][0] ;j++)
			cout<<a[i][j]<<" ";
		cout<<endl;
	}
}

int main(){
	read();
	//afis();
	bfs();
	write();
	return 0;
}