Pagini recente » Istoria paginii utilizator/yasin_ibraim | Cod sursa (job #467047) | Cod sursa (job #1056444) | Cod sursa (job #757714) | Cod sursa (job #228360)
Cod sursa(job #228360)
# include <cstdio>
# include <vector>
using namespace std;
# define FIN "bfs.in"
# define FOUT "bfs.out"
# define MAXN 100005
int N, M, i, a, b, Su, last;
int D[MAXN];
int S[MAXN];
int Coada[MAXN];
vector <int> E[MAXN];
void bf(int nod)
{
int i, j, L;
for (i = 1; i <= N; ++i)
D[i] = -1;
S[nod] = last = 1;
Coada[1] = nod;
D[nod] = 0;
for (i = 1; i <= last; ++i)
{
L = E[Coada[i]].size();
for (j = 0; j < L; ++j)
if (!S[E[Coada[i]][j]])
{
S[E[Coada[i]][j]] = 1;
Coada[++last] = E[Coada[i]][j];
D[E[Coada[i]][j]] = D[Coada[i]] + 1;
}
}
}
int main()
{
freopen(FIN,"r",stdin);
freopen(FOUT,"w",stdout);
scanf("%d%d%d",&N,&M,&Su);
for (i = 1; i <= M; ++i)
{
scanf("%d%d",&a,&b);
E[a].push_back(b);
}
bf(Su);
for (i = 1; i <= N; ++i)
printf("%d ",D[i]);
return 0;
}