Cod sursa(job #1329354)

Utilizator MarianMMorosac George Marian MarianM Data 29 ianuarie 2015 14:04:28
Problema BFS - Parcurgere in latime Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#define _CRT_SECURE_NO_DEPRECATE

#include <iostream>
#include <vector>
#include <queue>
using namespace std;

#define DMAXN 100001
#define DMAXM 1000001

int N, M, S;
queue<int> Q;

struct Nod{
	int dist = -1, parinte, desc;
	vector<int> Adj;
} G[DMAXN];

int main(){
	int i, x, y, lg;

	freopen("bfs.in", "r", stdin);
	freopen("bfs.out", "w", stdout);

	scanf("%d %d %d\n", &N, &M, &S);

	for (i = 0; i < M; i++){
		scanf("%d %d\n", &x, &y);
		G[x].Adj.push_back(y);
	}

	G[S].dist = 0;
	Q.push(S);

	while (!Q.empty()){
		x = Q.front(); 
		Q.pop();
		lg = G[x].Adj.size();
		for (i = 0; i < lg; i++){
			y = G[x].Adj[i];
			if (!G[y].desc){
				G[y].desc = 1;
				G[y].dist = G[x].dist + 1;
				G[y].parinte = x;
				Q.push(y);
			}
		}
	}

	for (i = 1; i <= N; i++) printf("%d ", G[i].dist);

	return 0;
}