Pagini recente » Cod sursa (job #2098092) | Cod sursa (job #2108213) | Cod sursa (job #2711908) | Cod sursa (job #630435) | Cod sursa (job #1765382)
#include<bits/stdc++.h>
#define N 100050
#define M 1000050
using namespace std;
vector <int> lda[M];
int n, m, s, cd;
int c[N], rs[N], v[N];
void bfs(int nod){
int i, j;
for (i = 1; i <= n; i++) rs[i] = -1;
cd = 1;
rs[nod] = 0;
c[cd]= nod;
for(i = 1; i <= cd; i++)
for(j = 0; j < v[c[i]]; j++)
if (rs[lda[c[i]][j]] == -1)
{
c[++cd] = lda[c[i]][j];
rs[c[cd]] = rs[c[i]] + 1;
}
}
int main(){
freopen("bfs.in", "r", stdin);
freopen("bfs.out", "w", stdout);
scanf("%d%d%d", &n, &m, &s);
int i, x, y;
for(i = 1; i <= m; i++) {
scanf("%d%d", &x, &y);
lda[x].push_back(y);
}
for(i = 1; i <= n; i++) v[i] = lda[i].size();
bfs(s);
for(i = 1; i <= n; i++) printf("%d ", rs[i]);
return 0;
}