Pagini recente » Cod sursa (job #1197630) | Cod sursa (job #956099) | Cod sursa (job #2019457) | Cod sursa (job #1510363) | Cod sursa (job #904563)
Cod sursa(job #904563)
#include <fstream>
#include <deque>
#include <utility>
#include <vector>
#include <iostream>
using std::cout;
using std::vector;
std::ifstream in("bfs.in");
std::ofstream out("bfs.out");
int N,M,S;
std::deque<int> c;
vector< vector<int> > arcs;
vector<int> dist;
vector<int> v;
void init()
{
arcs.resize(N + 1);
for (int i = 0; i < M; ++i)
{
int x,y; in >> x >> y;
arcs[x].push_back(y);
}
dist.resize(N + 1,2e9);
dist[S] = 0;
v.resize(N + 1);
v[S] = 1;
}
int main()
{
in >> N >> M >> S;
init();
c.push_back(S);
while ( !c.empty() )
{
int temp = c.front();
c.pop_front();
for (int i = 0; i < arcs[temp].size(); ++i)
if ( v[ arcs[temp][i] ] == 0 ) {
c.push_back( arcs[temp][i] );
dist[ arcs[temp][i] ] = dist[temp] + 1;
v[ arcs[temp][i] ] = 1;
}
}
for (int i = 1; i <= N; ++i)
dist[i] == 2e9 ? out << -1 << " " : out << dist[i] << " ";
in.close();
out.close();
return 0;
}