Pagini recente » Cod sursa (job #186417) | Cod sursa (job #1381099) | Cod sursa (job #1557819) | Cod sursa (job #1137327) | Cod sursa (job #2678701)
#include <algorithm>
#include <fstream>
#include <vector>
using namespace std;
vector <int> bfs(int startingNode, vector < vector <int> > &graph) {
vector <int> Queue(graph.size() + 1);
int back = 0;
int front = 0;
vector <int> distances (graph.size(), -1);
// Queue.push(startingNode);
Queue[++front] = startingNode;
distances[startingNode] = 0;
while (back < front /*!Queue.empty()*/) {
++ back;
auto currentNode = Queue[back];//Queue.front();
// Queue.pop();
for (auto &neighbour : graph[currentNode]) {
if (distances[neighbour] == -1) {
distances[neighbour] = distances[currentNode] + 1;
// Queue.push(neighbour);
Queue[++front] = neighbour;
}
}
}
reverse(distances.begin(), distances.end());
distances.pop_back();
reverse(distances.begin(), distances.end());
return distances;
}
int main() {
ifstream cin ("bfs.in");
ofstream cout ("bfs.out");
int numberOfNodes, numberOfEdges, startingNode;
cin >> numberOfNodes >> numberOfEdges >> startingNode;
vector < vector <int> > graph(numberOfNodes + 1);
for (int index = 0; index <= numberOfEdges; ++ index) {
int nodeOne, nodeTwo;
cin >> nodeOne >> nodeTwo;
graph[nodeOne].push_back(nodeTwo);
}
auto result = bfs(startingNode, graph);
for (auto &elem : result) {
cout << elem << ' ';
}
return 0;
}