Pagini recente » Cod sursa (job #1044964) | Cod sursa (job #204630) | Cod sursa (job #1133966) | Cod sursa (job #1784889) | Cod sursa (job #1979744)
#include <iostream>
#include <vector>
#include <fstream>
#include <cstring>
#include <queue>
using namespace std;
ifstream in("bfs.in");
ofstream out("bfs.out");
const int N_MAX=1000000;
int N,M,S,d[N_MAX];
bool use[N_MAX];
vector <int> G[N_MAX];
queue <int> q;
void bfs (int node)
{
use[node]=true;
q.push(node);
while (!q.empty())
{
int a=q.front();
q.pop();
for (int vecin : G[a])
{
if (!use[vecin])
{
use[vecin]=true;
q.push(vecin);
d[vecin]=d[a]+1;
}
}
}
}
int main()
{
fopen("bfs.in","r");
fopen("bfs.out","w");
in >> N >> M >> S;
for (int i = 0; i < M; ++i)
{
int x,y;
in >> x >> y;
G[x].push_back(y);
}
memset(use, -1, sizeof (use));
memset(d, 0, sizeof (d));
bfs(S);
for (int i = 1; i <= N; ++i){
if (i == S) out << "0" << " " ;
else if (d[i] == 0) out << "-1" << " ";
else out << d[i] << " " ;
}
out << '\n' ;
return 0;
}