Cod sursa(job #585261)

Utilizator varuvasiTofan Vasile varuvasi Data 28 aprilie 2011 18:56:42
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
//#include "stdafx.h"

#include <vector>
#include <queue>
#include <stdio.h>

using namespace std;
#define maxn 100333

int n, m, S;
vector<int> v[maxn];
int dist[maxn];

void bfs(int source)
{
	int i, nod;
	queue<int> q;
	q.push(source);

	for (i=1; i<=n; i++) 
		dist[i] = -1;
	dist[source] = 0;
	for (; !q.empty(); q.pop())	
	{
		//printf("%d\n", q.front());
		for (nod = q.front(), i = 0; i < v[nod].size(); i++)
			if (dist[v[nod][i]] == -1)
			{
				dist[v[nod][i]] = dist[nod] + 1;
				q.push(v[nod][i]);
				//printf("%d %d\n", nod, v[nod][i]);
			}
	}
}

int main()
{
	int i, j, x, y;
	FILE *fin = fopen("bfs.in", "rt"), *fout = fopen("bfs.out", "wt");

	fscanf(fin, "%d %d %d", &n, &m, &S);
	for (i=0; i<m; i++)
	{
		fscanf(fin, "%d %d", &x, &y);
		v[x].push_back(y);
	}

	bfs(S);


	for (i=1; i<=n; i++)
		fprintf(fout, "%d ", dist[i]);	

	fclose(fin), fclose(fout);

	return 0;
}