Cod sursa(job #595229)

Utilizator scipianusFMI Ciprian Olariu scipianus Data 11 iunie 2011 17:40:57
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include<fstream>
#include<cstdlib>
using namespace std;
int n,m,start;
int *A[100010];
struct {int nod,cost;} Coada[100010],aux;
int inc=-1,sf;
bool vizitat[100010];
int cost[100010];

void BFS(int x)
{
	int i,c;
	vizitat[x]=true;
	inc++;
	Coada[inc].nod=x;
	Coada[inc].cost=0;
	while(sf<=inc)
	{
		x=Coada[sf].nod;
		c=Coada[sf].cost;
		sf++;
		for(i=1;i<=A[x][0];i++)
		{
			if(vizitat[A[x][i]]==false)
			{
				vizitat[A[x][i]]=true;
				cost[A[x][i]]=c+1;
				inc++;
				Coada[inc].nod=A[x][i];
				Coada[inc].cost=c+1;
			}
		}
	}
}

int main()
{
	int i,x,y;
	ifstream fin("bfs.in");
	fin>>n>>m>>start;
	for(i=1;i<=n;i++)
	{
		A[i]=(int *)realloc(A[i],sizeof(int));
		A[i][0]=0;
	}
	for(i=1;i<=m;i++)
	{
		fin>>x>>y;
		A[x][0]++;
		A[x]=(int *)realloc(A[x],(A[x][0]+1)*sizeof(int));
		A[x][A[x][0]]=y;
	}
	fin.close();
	
	BFS(start);
	
	ofstream fout("bfs.out");
	for(i=1;i<=n;i++)
	{
		if(cost[i]!=0)
			fout<<cost[i]<<' ';
		else
			if(i==start)
				fout<<0<<' ';
			else
				fout<<-1<<' ';
	}
	fout<<"\n";
	fout.close();
	return 0;
}