Pagini recente » Cod sursa (job #1822814) | Cod sursa (job #183041) | Cod sursa (job #100211) | Cod sursa (job #2769841) | Cod sursa (job #1704895)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <utility>
using namespace std;
std::ifstream f("bfs.in");
std::ofstream g("bfs.out");
int N, M, S;
vector<vector<int>> edges;
vector<int> distances;
void read(){
int from,to;
f >> N >> M >> S;
for(int i = 0 ; i <= N ; ++i){
edges.push_back(vector<int>());
distances.push_back(-1);
}
for(int i = 0 ; i < M ; ++i){
f >> from >> to;
edges.at(from).push_back(to);
}
}
void bfs(){
queue<pair<int,int>> Q;
Q.push(make_pair(S,0));
int nod, dist;
while(Q.size() > 0){
nod = Q.front().first;
dist = Q.front().second;
Q.pop();
if(distances[nod] != -1){
continue;
}
distances[nod] = dist;
int newDist = dist + 1;
for(auto iter : edges.at(nod)){
if(distances[iter] == -1){
Q.push(make_pair(iter,newDist));
}
}
}
}
void printData(){
for(int i = 1 ; i <= N ; ++ i){
g << distances[i] << " ";
}
}
int main(){
read();
bfs();
printData();
return 0;
}