Cod sursa(job #765630)

Utilizator vld7Campeanu Vlad vld7 Data 8 iulie 2012 15:03:53
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <cstdio>
#include <cstring>
#include <vector>
#include <queue>

#define maxN 100005

using namespace std;

FILE *f = fopen ("bfs.in","r");
FILE *g = fopen ("bfs.out","w");

int n, m, S, viz[maxN], dist[maxN];

vector<int> L[maxN];
queue<int> Q;

void read()
{
	fscanf (f, "%d%d%d", &n, &m, &S);
	while (m--)
	{
		int a, b;
		
		fscanf (f, "%d%d", &a, &b);
		L[a].push_back(b);
	}
	
	memset (dist, -1, sizeof(dist) );
}

void bf(int nod)
{
	int x;
	
	viz[nod] = 1;	dist[nod] = 0;
	Q.push(nod);
	
	while ( !Q.empty() )
	{
		x = Q.front();	Q.pop();
		for (int i = 0; i < L[x].size(); i++)
			if ( !viz[ L[x][i] ] )
			{
				dist[ L[x][i] ] = dist[x] + 1;
				viz[ L[x][i] ] = 1;
				Q.push(L[x][i]);
			}
	}
}

int main()
{
	read();
	bf(S);
	
	for (int i = 1; i <= n; i++)
		fprintf (g, "%d ", dist[i]);
	
	fclose(f);
	fclose(g);
	
	return 0;
}