Cod sursa(job #1705871)

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

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

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

unsigned long visitat[Nmax];
long dist[Nmax];

void bfs(unsigned long s)
{

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

	dist[s] = 0;

	queue<unsigned long > Q;

	Q.push(s);

	visitat[s] = 1;
	while(!Q.empty())
	{
		unsigned long t = Q.front();
		Q.pop();

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

	}



}

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


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

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



	bfs(S);

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


	fclose(fin);
	fclose(fout);
}