Pagini recente » Cod sursa (job #3174509) | Cod sursa (job #2802332) | Cod sursa (job #2629666) | Cod sursa (job #1056385) | Cod sursa (job #762578)
Cod sursa(job #762578)
#include <iostream>
#include <vector>
#include <fstream>
#include <queue>
#define MARKED 1
std::vector< std::vector< int > > graf;
std::vector<int> mark;
int n, m, s;
void bfs( std::vector<int> &distance )
{
std::deque<int> q;
q.push_back( s );
mark[s] = MARKED;
distance[s] = 0;
while( !q.empty() )
{
int node = q.front();
q.pop_front();
for( int i = 0; i < graf[node].size(); i++ )
{
if( mark[ graf[node][i] ] != MARKED )
{
q.push_back( graf[node][i] );
mark[ graf[node][i] ] = MARKED;
distance[ graf[node][i] ] = distance[ node ] + 1;
}
}
}
}
int main()
{
std::ifstream in ( "bfs.in" );
std::ofstream out ( "bfs.out" );
in >> n >> m >> s;
graf.resize( n + 1 );
mark.resize( n + 1 );
std::vector<int> distance ( n + 1, -1 );
for( int i = 0; i < m; i++ )
{
int x, y;
in >> x >> y;
graf[x].push_back( y );
}
bfs( distance );
for( int i = 1; i <= n; i++ )
{
out << distance[i] << " ";
}
in.close();
out.close();
return 0;
}