Pagini recente » Cod sursa (job #70589) | Cod sursa (job #3229705) | Cod sursa (job #1921070) | Cod sursa (job #2087529) | 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;
}