Pagini recente » Borderou de evaluare (job #1741036) | Cod sursa (job #2857368) | Cod sursa (job #2115045) | Cod sursa (job #1741303) | Cod sursa (job #387418)
Cod sursa(job #387418)
#include<stdio.h>
#include<vector>
#include<algorithm>
#define pb push_back
#define N 100005
#define INF 0x3f3f3f3f
using namespace std;
int n, m, i, x, y, fol[N], sol[N],
q[10*N], p , u, nod;
vector <int> a[N];
void citire(), bf();
int main(){
freopen("bfs.in","r", stdin);
freopen("bfs.out","w", stdout);
citire();
bf();
for (i = 1; i <= n; i++)
if (sol[i] == INF) printf("-1 ");
else printf("%d ", sol[i] );
return 0;
}
void citire(){
scanf("%d %d %d", &n, &m, &nod);
for (i = 1; i <= m; i++){
scanf("%d %d", &x, &y);
a[x].pb(y);
}
}
void bf(){
q[0] = nod; fol[nod] = 1;
memset (sol, INF, sizeof(sol));
sol[nod] = 0;
for (p = 0, u = 0; p <= u; p++){
x = q[p];
for (int it = 0; it < a[x].size(); it++)
if (sol[x] + 1 < sol[a[x][it]]){
sol[a[x][it]] = sol[x] + 1;
if (!fol[a[x][it]]){
q[++u] = a[x][it];
fol[a[x][it]] = 1;
}
}
fol[x] = 0;
}
}