Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- size_t FindShortestWay(const CListGraph &graph, size_t from, size_t to) {
- auto *distances = new size_t[graph.VerticesCount()];
- for (size_t i = 0; i < graph.VerticesCount(); ++i)
- distances[i] = std::numeric_limits<size_t>::max();
- using queue_elem = std::pair<size_t, size_t>;
- std::set<std::pair<int, int>> queue;
- distances[from] = 0;
- queue.insert({0 ,from});
- while (!queue.empty()) {
- size_t current = queue.begin()->second;
- queue.erase(queue.begin());
- for (const auto &edge : graph.GetEdgesFromVertex(current)) {
- if (distances[edge.first] > distances[current] + edge.second) {
- if(distances[edge.first] != std::numeric_limits<size_t>::max()){
- queue.erase({distances[edge.first], edge.first});
- }
- distances[edge.first] = distances[current] + edge.second;
- queue.insert({distances[edge.first], edge.first});
- }
- }
- }
- delete[] distances;
- return distances[to];
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement