Pagini recente » Cod sursa (job #2299806) | Cod sursa (job #1162011) | Cod sursa (job #1950013) | Cod sursa (job #1779255) | Cod sursa (job #1611706)
#include <iostream>
#include <queue>
#include <vector>
#include <fstream>
using namespace std;
#define INF 10000001
void bfs(const int surs, const vector<vector<int>>& vec,
vector<int>& dist){
const int n = dist.size();
fill(dist.begin(), dist.end(), INF);
dist[surs] = 0;
queue<int> q;
q.push(surs);
vector<bool> e_viz(n, false);
while(!q.empty()){
const int cur = q.front();
q.pop();
if(e_viz[cur]){
continue;
}
e_viz[cur] = true;
for(int i = 0; i < vec[cur].size(); ++i){
if(dist[vec[cur][i]] > dist[cur]+1){
dist[vec[cur][i]] = dist[cur]+1;
q.push(vec[cur][i]);
}
}
}
}
int main()
{
ifstream f("bfs.in");
ofstream g("bfs.out");
int n, m, s;
f >> n >> m >> s;
--s;
vector<vector<int> > vec(n);
for(int i = 0, a, b; i < m; ++i){
f >> a >> b;
--a, --b;
vec[a].push_back(b);
}
vector<int> dist(n);
bfs(s, vec, dist);
for(int i = 0; i < n; ++i){
g << (dist[i] == INF ? -1 : dist[i]) << " ";
}
return 0;
}