Cod sursa(job #790849)

Utilizator mihaiSimuSimu Mihai mihaiSimu Data 22 septembrie 2012 15:20:14
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <stdio.h>
#include <queue>
#include <vector>
#include <bitset>
using namespace std;



int main(){
	int n,m,s,x,y;
	vector< vector<int> > G;
	vector<int> dist;
	bitset<100005> viz;
	viz.reset();

	freopen("bfs.in","r",stdin);
	freopen("bfs.out","w",stdout);
	scanf("%d",&n);
	for(int i=0;i<=n;i++){vector<int> vg; G.push_back(vg);dist.push_back(0);}
	scanf("%d",&m);scanf("%d",&s);
	for(int i=0;i<m;i++){
		scanf("%d",&x);scanf("%d",&y);
		G[x].push_back(y);
	}

	queue<int> q;
	q.push(s);
	viz[s]=1;
	while(!q.empty()){
		int node = q.front();q.pop();
		for(int i=0;i<G[node].size();i++){
			int v = G[node][i];if(viz[v]) continue;

			dist[v]=dist[node]+1;
			viz[v]=1;
			q.push(v);
		}

	}

	for(int i=1;i<=n;i++)
		if(!viz[i])
			printf("-1 ");
		else
			printf("%d ",dist[i]);
	return 0;
}