Pagini recente » Cod sursa (job #612832) | Cod sursa (job #2087720) | Cod sursa (job #2542504) | Cod sursa (job #579396) | Cod sursa (job #603878)
Cod sursa(job #603878)
#include <fstream>
#include <queue>
#include <vector>
#include <algorithm>
#include <cstring>
#define NMAX 100001
#define INF (1<<30)
#define pb push_back
#define mp make_pair
#define nod first
#define dist second
using namespace std;
ifstream in("bfs.in");
ofstream out("bfs.out");
int N, M, Sursa, Dist[NMAX], x, y;
queue< pair< int, int > > Q;
vector< int > G[NMAX];
bool USED[NMAX];
void BF()
{
while( !Q.empty() )
{
for( vector< int >::iterator Vecin = G[(Q.front()).nod].begin(); Vecin != G[(Q.front()).nod].end(); Vecin++ )
if( !USED[*Vecin] )
{
USED[*Vecin] = true;
Q.push( mp( *Vecin, (Q.front()).dist + 1 ) );
Dist[*Vecin] = (Q.front()).dist + 1;
}
Q.pop();
}
}
int main()
{
in >> N >> M >> Sursa;
while( M-- )
{
in >> x >> y;
G[x].pb( y );
}
for( int i = 1; i <= N; i++ ) Dist[i] = INF;
memset( USED, false, sizeof(USED) );
Dist[Sursa] = 0;
USED[Sursa] = true;
Q.push( mp( Sursa, 0 ) );
BF();
for( int i = 1; i <= N; i++ )
( Dist[i] == INF ) ? out << "-1 " : out << Dist[i] << ' ';
out << '\n';
return 0;
}