Pagini recente » Cod sursa (job #2364247) | Cod sursa (job #152016) | Cod sursa (job #1554040) | Cod sursa (job #1894952) | Cod sursa (job #2856445)
#include <fstream>
#include <vector>
#include <queue>
#define INF 10000000
#define MAX 100002
std::ifstream cin( "bfs.in" );
std::ofstream cout( "bfs.out" );
int n;
std::vector< int > nod[ MAX ];
int dp[ MAX ];
std::queue< int > q;
void bfs( int N ) {
for( int i = 1; i <= n; i++ )
dp[ i ] = INF;
q.push( N );
dp[ N ] = 0;
while( !q.empty() ) {
int N = q.front();
q.pop();
for( int next : nod[ N ] )
if( dp[ N ] + 1 <= dp[ next ] ) {
dp[ next ] = dp[ N ] + 1;
q.push( next );
}
}
}
int main()
{
int m, s;
cin >> n >> m >> s;
for( int i = 1; i <= m; i++ ) {
int u, v;
cin >> u >> v;
nod[ u ].push_back( v );
}
bfs( s );
for( int i = 1; i <= n; i++ )
if( dp[ i ] == INF )
cout << -1 << " ";
else cout << dp[ i ] << " ";
return 0;
}