Pagini recente » Cod sursa (job #2405715) | Cod sursa (job #2404040) | Cod sursa (job #1948142) | Cod sursa (job #1511096) | Cod sursa (job #1705854)
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>
#define MAX 100000
#define NIL -1
#define INF 999999
unsigned int n, m, s, in, out;
std::vector< std::vector <int> > edges;
std::queue<int> q;
int main(void)
{
freopen( "bfs.in", "r", stdin );
freopen( "bfs.out", "w", stdout );
std::cin >> n >> m >> s;
edges.resize(n + 1);
for( unsigned int i = 0; i < m; ++i )
{
std::cin >> in >> out;
edges[in].push_back(out);
}
bool visited[n+1];
int dist[n+1];
//int predec[n+1];
for( unsigned int i = 1; i <= n; ++i )
{
visited[i] = false;
dist[i] = INF;
//predec[i] = NIL;
}
dist[s] = 0;
q.push(s);
while( !q.empty() )
{
int curr = q.front();
visited[curr] = true;
q.pop();
for(unsigned int i = 0; i < edges[curr].size(); ++i )
{
if( !visited[edges[curr][i]] )
{
visited[edges[curr][i]] = true;
//predec[edges[curr][i]] = curr;
dist[edges[curr][i]] = dist[curr] + 1;
q.push(edges[curr][i]);
}
}
}
for( unsigned int i = 1; i <= n; ++i )
{
dist[i] < INF ? std::cout << dist[i] << ' ' : std::cout << -1 << ' ';
}
fclose( stdin );
fclose( stdout );
return 0;
}