Pagini recente » Cod sursa (job #1894298) | Cod sursa (job #982734) | Cod sursa (job #1819090) | Cod sursa (job #813557) | Cod sursa (job #849442)
Cod sursa(job #849442)
#include <cstdio>
#include <cstdlib>
#include <vector>
#define nmax 500001
using namespace std;
vector<int> vecini[nmax];
int N , M , S ;
int c[nmax] , d[nmax] , vizitat[nmax] ;
void BFS ( int x )
{
int p , u ;
p = u = 1;
c[p] = x;
vizitat[x] = 1;
while ( p <= u )
{
x = c[p];
p++;
for ( int i = 0 ; i < vecini[x].size() ; i++ )
{
int y = vecini[x][i];
if ( !vizitat[y] )
{
vizitat[y] = 1 ;
c[++u] = y ;
d[y] = d[x] + 1 ;
}
}
}
}
int main ()
{
FILE *fin , *fout ;
fin = fopen ( "bfs.in" , "rt" );
fout = fopen ( "bfs.out" , "wt" );
fscanf ( fin , "%d %d %d" , &N , &M , &S );
for ( int i = 1 ; i <= M ; i++ )
{
int a , b ;
fscanf ( fin , "%d %d" , &a , &b );
vecini[a].push_back(b);
}
int x = S ;
BFS ( x );
for ( int i = 1 ; i <= N ; i++ )
if ( i == S ) fprintf ( fout , "0 " ) ;
else if ( !d[i] ) fprintf ( fout , "-1 " ) ;
else fprintf ( fout , "%d " , d[i] );
fclose ( fin );
fclose ( fout );
return 0;
}