Cod sursa(job #1705854)

Utilizator m.scarlat95Scarlat Marius-George m.scarlat95 Data 21 mai 2016 00:30:07
Problema BFS - Parcurgere in latime Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>

#define MAX	100000
#define NIL	-1
#define INF 999999

unsigned int n, m, s, in, out;

std::vector< std::vector <int> > edges;
std::queue<int> q;


int main(void)
{
	freopen( "bfs.in", "r", stdin );
	freopen( "bfs.out", "w", stdout );

	std::cin >> n >> m >> s;
	edges.resize(n + 1);
	for( unsigned int i = 0; i < m; ++i )
	{
		std::cin >> in >> out;
		edges[in].push_back(out);
	}

	bool visited[n+1];
	int dist[n+1];
	//int predec[n+1];
	for( unsigned int i = 1; i <= n; ++i )
	{
		visited[i]  = false;
		dist[i] = INF;
		//predec[i] = NIL;
	}

	dist[s] = 0;
	q.push(s);
	while( !q.empty() )
	{
		int curr = q.front();
		visited[curr] = true;
		q.pop();
	
		for(unsigned int i = 0; i < edges[curr].size(); ++i )
		{
			if( !visited[edges[curr][i]] )
			{
				visited[edges[curr][i]] = true;
				//predec[edges[curr][i]] = curr;
				dist[edges[curr][i]] = dist[curr] + 1;
				q.push(edges[curr][i]);
			}
		}

		
	}

	for( unsigned int i = 1; i <= n; ++i )
	{
		dist[i] < INF ? std::cout << dist[i] << ' ' : std::cout << -1 << ' ';
	}

	fclose( stdin );
	fclose( stdout );
	return 0;
}