Cod sursa(job #526899)

Utilizator Gaby_mMititelu Gabriel Gaby_m Data 29 ianuarie 2011 19:01:36
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include<cstdio>
#include<queue>
using namespace std;

struct list {
	int neigh;
	list *next;
};

list *listad[100001];
bool viz[100001];
int dist[100001];

int N, M, S;
void readData() {
	
	scanf("%d %d %d", &N, &M, &S);
	int x, y;
	for (int i = 0; i < M; i++) {
		scanf("%d %d ", &x, &y);

		list *aux = new list;
		aux->neigh = y;
		aux->next = listad[x];
		listad[x] = aux;	
	}
}

void bfs(int source){
	queue<int> neigh;
	viz[source] = 1;
	dist[source] = 0;
	neigh.push(source);

	int current;
	list *aux;
	while (!neigh.empty()){
		current = neigh.front();
		neigh.pop();

		aux = listad[current];
		while (aux) {
			if (!viz[aux->neigh]) {
				viz[aux->neigh] = 1;
				dist[aux->neigh] = dist[current] + 1;
				neigh.push(aux->neigh);
			}
			aux = aux->next;
		}
	}
}

int main() {
	freopen("bfs.in", "r", stdin);
	freopen("bfs.out", "w", stdout);
	readData();

	bfs(S);

	for (int i = 1; i <= N; i++) {
		if (viz[i]) {
			printf("%d ",dist[i]);
		}
		else printf("-1 ");
	}

	printf("\n");
	return 0;
}