Cod sursa(job #1705875)

Utilizator roby10roby10 roby10 Data 21 mai 2016 01:18:32
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
#include <cstring>

using namespace std;
#define Nmax 100002
long N,M,S;

vector< vector<long> > adj_mat(Nmax, vector<long>());

long dist[Nmax];

void bfs(long s)
{

	memset(dist , -1 , sizeof(dist));

	dist[s] = 0;

	queue<long > Q;

	Q.push(s);

	while(!Q.empty())
	{
		long t = Q.front();
		Q.pop();

		for(long i = 0 ; i < adj_mat[t].size(); i++)
		{
			long vecin = adj_mat[t][i];
			if(dist[vecin] == -1)
			{
				Q.push(vecin);
				dist[vecin] = dist[t] + 1;
			}
		}

	}



}

int main()
{
	FILE *fin = fopen("bfs.in", "r");
	FILE *fout = fopen("bfs.out", "w");


	fscanf(fin, "%li %li %li", &N, &M, &S);

	long a,b;
	for(long i = 0 ; i < M; i++)
	{
		fscanf(fin,"%lu %lu", &a, &b);
		adj_mat[a].push_back(b);
	}



	bfs(S);

	for(long i = 1 ; i <= N; i++ )
		fprintf(fout, "%li ", dist[i]);

	fprintf(fout,"\n");


	fclose(fin);
	fclose(fout);

	return 0;
}