Cod sursa(job #1244838)

Utilizator roxana.istratePoenaru Roxana roxana.istrate Data 18 octombrie 2014 12:03:44
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <iostream>
#include <queue>
#include <vector>
using namespace std;

int N, M, S;
vector<vector<int>> adj(100001);
vector<int> answer(100001, -1);
vector<bool> marked(100001, false);

void bfs(int start){
	queue<pair<int, int>> q;	// node_nr, distance from root
	q.push(make_pair(start, 0));
	
	marked[start] = true;
	
	while(!q.empty()){
		pair<int, int> next = q.front();
		q.pop();
		
		answer[next.first] = next.second;
		
		for(int i = 0; i < adj[next.first].size(); i++){
			if(!marked[adj[next.first][i]]){
				marked[adj[next.first][i]] = true;
				q.push(make_pair(adj[next.first][i], next.second + 1));
			}
		}
	}
}

int main(){
	int from, to;
	freopen("bfs.in", "r", stdin);
	freopen("bfs.out", "w", stdout);
	scanf("%d%d%d", &N, &M, &S);
	for(int i = 0; i < M; i++){
		scanf("%d%d", &from, &to);
		adj[--from].push_back(--to);
	}
	
	bfs(--S);
	
	for(int i = 0; i < N; i++){
		printf("%d ", answer[i]);
	}
	return 0;
}