Pagini recente » Cod sursa (job #125461) | Cod sursa (job #1158149) | Cod sursa (job #612831) | Cod sursa (job #2802924) | Cod sursa (job #2533037)
#include <iostream>
#include <bitset>
#include <stdio.h>
#include <vector>
#include <deque>
#include <ctype.h>
using namespace std;
const int NMAX = 1e5 + 1;
bitset<NMAX> vizitat;
vector<int> v[NMAX];
deque<int> dq;
int dist[NMAX];
FILE *fin, *fout;
int numar() {
char ch;
int nr = 0;
while ( isspace( ch = fgetc( fin ) ) );
do {
nr = nr * 10 + ch - '0';
} while ( isdigit( ch = fgetc( fin ) ) );
return nr;
}
int main() {
fin = fopen( "bfs.in", "r" );
fout = fopen( "bfs.out", "w" );
int n, m, i, k, nod, nod2;
vector<int>::iterator it;
n = numar();
m = numar();
k = numar();
for ( i = 0; i < m; i ++ ) {
nod = numar();
nod2 = numar();
if ( nod != nod2 )
v[nod].push_back( nod2 );
}
for ( i = 0; i <= n; i ++ )
dist[i] = 1000000;
vizitat[k] = 1;
for ( it = v[k].begin(); it != v[k].end(); it ++ ) {
dq.push_back( *it );
dist[*it] = 1;
}
while ( !dq.empty() ) {
nod = dq.front();
if ( !vizitat[nod] ) {
vizitat[nod] = 1;
for ( it = v[nod].begin(); it != v[nod].end(); it ++ ) {
if ( !vizitat[*it] ) {
dq.push_back( *it );
dist[*it] = min( dist[nod] + 1, dist[*it] );
}
}
}
dq.pop_front();
}
for ( i = 1; i <= n; i ++ ) {
if ( i == k )
fprintf( fout, "0 " );
else if ( dist[i] == 1000000 )
fprintf( fout, "-1 " );
else
fprintf( fout, "%d ", dist[i] );
}
return 0;
}