Pagini recente » Cod sursa (job #2460754) | Cod sursa (job #24988) | Cod sursa (job #16421) | Cod sursa (job #2806599) | Cod sursa (job #2636960)
#include <iostream>
#include <vector>
#include <queue>
#include <string.h>
#include <fstream>
using namespace std;
const int N = 1e5;
bool visited[N+1];
int actual_dist[N+1];
int dist;
vector<int> edges[N+1];
queue <int> bfs_q;
void bfs ( int start_node ) {
actual_dist[start_node] = dist = 0;
bfs_q.push ( start_node );
int actual_node;
do {
actual_node = bfs_q.front();
bfs_q.pop ();
visited[actual_node] = 1;
dist = actual_dist[actual_node];
for ( int i = 0; i < (int)edges[actual_node].size (); i ++ ) {
if ( visited[edges[actual_node][i]] == 0 ) {
bfs_q.push ( edges[actual_node][i] );
visited[edges[actual_node][i]] = 1;
actual_dist[edges[actual_node][i]] = dist + 1;
}
}
}
while ( !bfs_q.empty() );
}
ifstream fin ( "bfs.in" );
ofstream fout ( "bfs.out" );
int main()
{
int n, m, node_u;
fin >> n >> m >> node_u;
for ( int i = 1; i <= m; i ++ ) {
int x, y;
fin >> x >> y;
edges[x].push_back ( y );
}
bfs ( node_u );
for ( int i = 1; i <= n; i ++ ) {
if ( i == node_u )
fout << 0;
else if ( actual_dist[i] == 0 )
fout << -1;
else
fout << actual_dist[i];
fout << ' ';
}
return 0;
}