Pagini recente » Cod sursa (job #2410844) | Cod sursa (job #1713068) | Cod sursa (job #1584825) | Cod sursa (job #150043) | Cod sursa (job #1704877)
#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>> queue;
queue.push(make_pair(S,0));
int nod, dist;
while(queue.size() != 0){
nod = queue.front().first;
dist = queue.front().second;
queue.pop();
distances[nod] = dist;
for(auto iter : edges.at(nod)){
if(distances[iter] == -1){
queue.push(make_pair(iter,dist + 1));
}
}
}
}
void printData(){
for(int i = 1 ; i <= N ; ++ i){
g << distances[i] << " ";
}
}
int main(){
read();
bfs();
printData();
return 0;
}