Pagini recente » Diferente pentru preoni-2008/runda-1 intre reviziile 9 si 8 | Istoria paginii utilizator/baltoi.teodor | Diferente pentru teoria-jocurilor intre reviziile 24 si 23 | Istoria paginii utilizator/memetel_lavinia | Cod sursa (job #966476)
Cod sursa(job #966476)
#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;
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++];
for(int i=0;i<vv[x].size();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;
}