Cod sursa(job #966477)

Utilizator dropsdrop source drops Data 25 iunie 2013 22:58:17
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <iostream>
#include <fstream>
#include <cmath>
#include <vector>
#include <queue>
#include <deque>
#include <list>
#include <string>
#include <algorithm>
using namespace std;
ifstream ff("bfs.in");
ofstream gg("bfs.out");
#define inf 0xffffff
#define max 100001
bool ww[max];
int n, m, s, dd[max], qq[max];
vector<int> vv[max];

void bfs(){
	int p, u, x, y, l;
	for(int i=1;i<=n;i++) dd[i]=inf;
	ww[qq[p=u=1]=s]=1;
	dd[s]=0;
	while(p<=u){
		x=qq[p++];
		l=vv[x].size();
		for(int i=0;i<l;i++){
			y=vv[x][i];
			if(!ww[y]){
				ww[qq[++u]=y]=1;
				dd[y]=dd[x]+1;
			}
		}
	}
}

int main(){
	int x, y;
	ff >> n >> m >> s;
	for(int i=0;i<m;i++){
		ff >> x >> y;
		vv[x].push_back(y);
	}
	bfs();
	for(int i=1;i<=n;i++)
		if(i==s) gg << "0 "; else gg << (dd[i]==inf?-1:dd[i]) << " ";
	return 0;
}