Cod sursa(job #1212837)

Utilizator andreas.chelsauAndreas Chelsau andreas.chelsau Data 26 iulie 2014 10:05:19
Problema BFS - Parcurgere in latime Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <iostream>
#include <stdio.h>
#include <queue>
#include <unordered_set>
using namespace std;
struct Node{
	int elt;
	Node* next;
};
Node* l[100000 + 100];
int visited[100000 + 100],N,M,S;
void add(int i,int j){
	if(i != j){
		Node* n = new Node;
		n->elt = j;
		if(l[i] == NULL){
			l[i] = n;
			n->next = NULL;
		}
		else{
			n->next = l[i];
			l[i] = n;
		}
	}
}
void bfs(int start){
	int edge = 0;
	queue<int> q;
	q.push(start);
	visited[start] = 0;
	while(q.size() > 0){
		int node = q.front();
		q.pop();
		Node* n = l[node];
		edge++;
		while(n != NULL){
			if(visited[n->elt] == -1){
				visited[n->elt] = edge;
				q.push(n->elt);
			}
			n = n->next;
		}
	}
	for(int i = 1; i <= N; i++)
		printf("%d ",visited[i]);
}


int main(){
	freopen("bfs.in","r",stdin);
	freopen("bfs.out","w",stdout);
	scanf("%d%d%d",&N,&M,&S);
	for(int i = 0; i < M; i++){
		int a,b;
		scanf("%d%d",&a,&b);
		add(a,b);
	}

	for(int i = 1; i <= N; i++)
		visited[i] = -1;
	bfs(S);

	return 0;
}