Pagini recente » Cod sursa (job #3297993) | Cod sursa (job #3292870) | Cod sursa (job #1938912) | Cod sursa (job #666527) | Cod sursa (job #3297306)
#include <stdio.h>
#include <queue>
#include <vector>
const int INF = 1e9;
const int MAXN = 1e5;
std::vector<int> adj[MAXN];
int dist[MAXN];
int main() {
FILE *fin = fopen( "bfs.in", "r" );
FILE *fout = fopen( "bfs.out", "w" );
int n, m;
fscanf( fin, "%d%d", &n, &m );
int src;
fscanf( fin, "%d", &src );
src--;
for( int i = 0; i < m; i++ ){
int a, b;
fscanf( fin, "%d %d", &a, &b );
a--; b--;
adj[a].emplace_back( b );
}
for( int i = 0; i < n; i++ )
dist[i] = +INF;
std::queue<int> q;
q.push( src );
dist[src] = 0;
while( !q.empty() ){
int u = q.front();
q.pop();
for( int v : adj[u] )
if( dist[u] + 1 < dist[v] ){
dist[v] = 1 + dist[u];
q.push( v );
}
}
for( int i = 0; i < n; i++ )
fprintf( fout, "%d ", dist[i] == +INF ? -1 : dist[i] );
fputc( '\n', fout );
fclose( fin );
fclose( fout );
return 0;
}