Pagini recente » Cod sursa (job #743255) | Cod sursa (job #2867130) | Cod sursa (job #2357898) | Cod sursa (job #782850) | Cod sursa (job #2053512)
#include <stdio.h>
#include <stdlib.h>
#include <queue>
#include <vector>
using namespace std;
#define MAX_N 100000
#define none -1
int dist[MAX_N];
queue<int> bfs;
vector<int> edges[MAX_N];
int main() {
FILE *fin = fopen( "bfs.in", "r" ), *fout = fopen( "bfs.out", "w" );
int n, m, s, i, a, b;
fscanf( fin, "%d%d%d", &n, &m, &s );
for ( i = 0; i < n; i ++ )
dist[i] = none;
for ( i = 0; i < m; i ++ ) {
fscanf( fin, "%d%d", &a, &b );
edges[-- a].push_back( -- b );
}
dist[-- s] = 0;
bfs.push( s );
while ( bfs.size() ) {
int u = bfs.front();
bfs.pop();
for ( int v : edges[u] )
if ( dist[v] == none ) {
dist[v] = dist[u] + 1;
bfs.push( v );
}
}
for ( i = 0; i < n; i ++ )
fprintf( fout, "%d ", dist[i] );
fclose( fin );
fclose( fout );
return 0;
}