Pagini recente » Borderou de evaluare (job #2019902) | Cod sursa (job #1097037) | Clasament simulare-cartita-07 | Cod sursa (job #2526917) | Cod sursa (job #2097300)
#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(){
in >> N >> M >> S;
for (int i = 0; i < M; ++i)
{
int x,y;
in >> x >> y;
G[y].push_back(x);
}
memset(use, 0, sizeof (use));
memset(d, -1, 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;
}