Pagini recente » Cod sursa (job #521444) | Cod sursa (job #219064) | Cod sursa (job #2048852) | Monitorul de evaluare | Cod sursa (job #2015456)
#include <bits/stdc++.h>
#define maxn 100001
using namespace std;
int n, m, l , start;
vector < int > a[ maxn ];
int g[ maxn ], s[ maxn ], cost[ maxn ];
void parcurgere(int nod){
memset(cost, -1, sizeof(cost));
l = 1;
cost[ nod ] = 0;
s[ l ] = nod;
for (int i = 1; i <= l; i++)
for (int j = 0; j < g[s[ i ]]; j++)
if (cost[ a[ s [ i ]][ j ]] == -1){
s[ ++l ] = a[ s [ i ]][ j ];
cost[ s [ l ] ] = cost[ s[ i ] ] + 1;
}
}
int main()
{
freopen("bfs.in", "r", stdin);
freopen("bfs.out", "w", stdout);
scanf("%d %d %d ", &n, &m, &start);
int x, y;
for (int i = 1; i <= m; i++){
scanf("%d %d ", &x, &y);
a[ x ].push_back( y );
}
for (int i = 1; i <= n; i++)
g[ i ] = a[ i ].size();
parcurgere( start );
for (int i = 1; i <= n; i++)
printf("%d ", cost[ i ]);
printf("\n");
}