Cod sursa(job #283434)

Utilizator mihneadbDobrescu-Balaur Mihnea mihneadb Data 19 martie 2009 09:56:49
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <stdio.h>
#include <vector>
#include <queue>

using namespace std;

vector < int > g [100100];
vector < bool > viz(100100);
queue < int > coada;
int n,m,cost[100100],start;

void citire(){
	int a,b;
	
	scanf("%d%d%d",&n,&m,&start);
	for(int i=1;i<=m;++i){
		scanf("%d%d",&a,&b);
		g[a].push_back(b);
	}
}

void bf(){
	int curr,vecini;
	coada.push(start);
	viz[start]=true;
	while(!coada.empty()){
		curr=coada.front();
		coada.pop();
		vecini=g[curr].size();
		for (int i=0;i<vecini;++i)
			if(!viz[g[curr][i]]){
				coada.push(g[curr][i]);
				cost[g[curr][i]]=cost[curr]+1;
				viz[g[curr][i]]=1;
			}
	}
}

int main(){
	freopen("bfs.in","r",stdin);
	freopen("bfs.out","w",stdout);
	
	citire();
	bf();
	
	for(int i=1;i<=n;++i)
		if(viz[i])
			printf("%d ",cost[i]);
		else
			printf("-1 ");
	printf("\n");
	return 0;
}