Pagini recente » Cod sursa (job #757924) | Cod sursa (job #1187235) | Cod sursa (job #1862392) | Monitorul de evaluare | Cod sursa (job #2202364)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
int const NM = 1e5 + 7;
char const in [] = "bfs.in";
char const out [] = "bfs.out";
struct code
{
int x , y;
};
vector <int> v [NM];
queue <int> q;
bool mark [NM];
int dp [NM] , l , n , m;
void bfs()
{
int i;
q . push (l);
mark [l] = 1;
while(q . size ())
{
int a = q . front ();
int sz = v [a] . size () ;
mark [a] = 1;
for(i = 0 ; i < sz ; ++ i)
if(! mark [v [a][i]])
{
if(dp [v [a][i]] == -1)
dp [v [a][i]] = 0;
dp [v [a][i]] = 1 + dp [a];
q . push (v [a][i]);
mark [v [a][i]] = 1;
}
q . pop ();
}
for(i = 1 ; i <= n ; ++ i)
if(! dp [i] && i != l)
dp [i] = -1;
}
ifstream f (in);
ofstream g (out);
int main()
{
int i;
f >> n >> m >> l;
for(i = 1 ; i <= m ; ++ i)
{
int x , y;
f >> x >> y;
v [x] . push_back (y);
}
bfs ();
for(i = 1 ; i <= n ; ++ i)
g << dp [i] << " ";
return 0;
}