Cod sursa(job #784119)

Utilizator nautilusCohal Alexandru nautilus Data 4 septembrie 2012 22:52:28
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include<fstream>
#include<cstring>
#include<vector>
#include<queue>
using namespace std;
#define NMAX 100010

int n,m,s;
vector <int> g[NMAX];
queue <int> q;
int dist[NMAX];

void read()
{
	int i,x,y;

	ifstream fin("bfs.in");

	fin>>n>>m>>s;
	for (i=1; i<=m; ++i)
	{
		fin>>x>>y;
		g[x].push_back(y);
	}

	fin.close();
}

void bfs()
{
	int i,elem;

	q.push(s);
	while (!q.empty())
	{
		elem = q.front();
		for (i=0; i<(int)g[elem].size(); ++i)
			if (dist[g[elem][i]] == -1)
			{
				q.push(g[elem][i]);
				dist[g[elem][i]] = dist[elem] + 1;
			}
		q.pop();
	}
}

void write()
{
	int i;

	ofstream fout("bfs.out");

	for (i=1; i<=n; ++i)
		fout<<dist[i]<<" ";
	fout<<'\n';

	fout.close();
}

int main()
{
	int i;

	read();

	//memset(dist,-1,n+1);
	for (i=1; i<=n; ++i)
		dist[i] = -1;
	dist[s] = 0;

	bfs();
	write();

	return 0;
}