Cod sursa(job #1035055)

Utilizator TeOOOVoina Teodora TeOOO Data 18 noiembrie 2013 11:55:13
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
//Include
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
FILE *in, *out;

//Constante
const int sz = (int)1e5+1;
const int oo = (1<<30)-1;

//Define
#define pb push_back

// Variabile
int nodes, edges, startNode, from, to;
int dist[sz];
vector <int> graph[sz];
queue <int> bfsQ;

// Main
int main()
{
    in=fopen("bfs.in", "rt");
    out=fopen("bfs.out", "wt");
    fscanf(in,"%d%d%d",&nodes, &edges, &startNode);
    while(edges--)
	{
		fscanf(in,"%d%d",&from, &to);
		graph[from].pb(to);
	}
	for(int i=1; i<=nodes; ++i)
		dist[i] = oo;
	bfsQ.push(startNode);
	dist[startNode] = 0;

	while(!bfsQ.empty())
	{
		int currentNode = bfsQ.front();
		bfsQ.pop();
		vector<int>::iterator it, end=graph[currentNode].end();
		for(it=graph[currentNode].begin(); it!=end; ++it)
		{
			if(dist[currentNode] + 1 < dist[*it])
			{
				dist[*it] = dist[currentNode]+1;
				bfsQ.push(*it);
			}
		}
	}
	for(int i=1; i<=nodes; ++i)
		fprintf(out,"%d ",dist[i]==oo? -1:dist[i]);

    fclose(in);
    fclose(out);
    return 0;

}