Cod sursa(job #2599949)

Utilizator rkibistuflaviu razvan rkibistu Data 11 aprilie 2020 20:42:04
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include <stdio.h>

#include <vector>



using namespace std;



#define maxn 100010



int N, M, L, Start;

vector <int> A[maxn];

int G[maxn], S[maxn], Cost[maxn];



void BFS(int nod)

{

	int i, j;



	memset(Cost, -1, sizeof(Cost));  //	Marchez toate nodurile ca fiind nevizitate



	//	Introduc nodul de start in coada

	L = 1;

	Cost[nod] = 0;

	S[L] = nod;



	for (i = 1; i <= L; i++)	//	Elimin pe rand nodurile din coada

		for (j = 0; j < G[S[i]]; j++)	//	Parcurg vecinii nodului ce urmeaza sa fie eliminat

			if (Cost[A[S[i]][j]] == -1)

			{

				//	Adaug vecinii nevizitati in coada si le calculez distanta

				S[++L] = A[S[i]][j];

				Cost[S[L]] = Cost[S[i]] + 1;

			}

}



int main()

{

	freopen("bfs.in", "r", stdin);

	freopen("bfs.out", "w", stdout);



	int i, x, y;



	scanf("%d %d %d ", &N, &M, &Start);



	//	Citesc arcele si retin graful sub forma de lista de vecini



	for (i = 1; i <= M; i++)

	{

		scanf("%d %d ", &x, &y);

		A[x].push_back(y);

	}



	for (i = 1; i <= N; i++)

		G[i] = A[i].size();



	BFS(Start);



	for (i = 1; i <= N; i++)

		printf("%d ", Cost[i]);

	printf("\n");



	return 0;

}