Advertisement
Guest User

Untitled

a guest
May 23rd, 2019
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.95 KB | None | 0 0
  1. size_t FindShortestWay(const CListGraph &graph, size_t from, size_t to) {
  2.   auto *distances = new size_t[graph.VerticesCount()];
  3.   for (size_t i = 0; i < graph.VerticesCount(); ++i)
  4.     distances[i] = std::numeric_limits<size_t>::max();
  5.   using queue_elem = std::pair<size_t, size_t>;
  6.   std::set<std::pair<int, int>> queue;
  7.   distances[from] = 0;
  8.   queue.insert({0 ,from});
  9.   while (!queue.empty()) {
  10.     size_t current = queue.begin()->second;
  11.     queue.erase(queue.begin());
  12.     for (const auto &edge : graph.GetEdgesFromVertex(current)) {
  13.       if (distances[edge.first] > distances[current] + edge.second) {
  14.         if(distances[edge.first] != std::numeric_limits<size_t>::max()){
  15.           queue.erase({distances[edge.first], edge.first});
  16.         }
  17.         distances[edge.first] = distances[current] + edge.second;
  18.         queue.insert({distances[edge.first], edge.first});
  19.       }
  20.     }
  21.   }
  22.  
  23.   delete[] distances;
  24.   return distances[to];
  25. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement