Cod sursa(job #562554)

Utilizator ms-ninjacristescu liviu ms-ninja Data 23 martie 2011 13:00:22
Problema BFS - Parcurgere in latime Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>
using namespace std;
#define dim 25005
char mat[dim][dim];
int cost[dim];
char v[dim];
int coada[1000000][2];
int n, m, s;

void bfs(int nod)
{
	coada[1][0]=nod;
	
	int inc=1;
	int sf=1;
	
	while(inc<=sf)
	{
		for(int k=1;k<=n;++k)
		{
			if(v[k]==0 && mat[coada[inc][0]][k]==1)
			{
				if(k==coada[inc][0])
					cost[k]=0;
				else
				{
					if( (cost[k]>coada[inc][1]+1) || cost[k]==-1)
					{
						cost[k]=coada[inc][1]+1;
						v[k]=1;
						++sf;
						coada[sf][0]=k;
						coada[sf][1]=coada[inc][1]+1;
					}
				}
			}
		}
		++inc;
	}
	
}

int main()
{
	ifstream fin("bfs.in");
	ofstream fout("bfs.out");
	int i, a, b;
	
	fin>>n >>m >>s;
	
	for(i=1;i<=m;++i)
	{
		fin>>a >>b;
		mat[a][b]=1;
	}
	
	for(i=1;i<=n;++i)
		cost[i]=-1;
	cost[s]=0;
	bfs(s);
	
	for(i=1;i<=n;++i)
		fout<<cost[i] <<" ";
	return 0;
}