Тема: Обхід графа з обмеженнями
Дано граф у форматі початкова вершина, кінцева вершина, вартість переходу.
Початок і кінець маршруту.
А також кількість зупинок, які можна зробити при переході
з початку до кінця вказаного маршруту.
Потрібно знайти найдешевший шлях з пункту А в пункт Б із обмеженою кількістю зупинок.
Моделюється найдешевший переліт літаком з обмеженою кількістю пересадок.
Завдання звідси https://leetcode.com/problems/cheapest- … scription/ .
Найдешевший маршрут я знаходжу ось так:
class Solution {
public:
int findCheapestPrice(const int& n, const vector<vector<int>>& flights, const int& src, const int& dst, const int& k)
{
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> dist_vert;
vector<int> distances(n, 1e9 + 7);
distances[src] = 0;
dist_vert.push(make_pair(0, src));
while (!dist_vert.empty()) {
pair<int, int> item = dist_vert.top();
int distance = item.first;
int vertex = item.second;
dist_vert.pop();
for (size_t i = 0; i < flights.size(); ++i) {
int source = flights[i][0];
int destin = flights[i][1];
int price = flights[i][2];
if (source == vertex && (distance + price < distances[destin])) {
distances[destin] = distance + price;
dist_vert.push(make_pair(distances[destin], destin));
}
}
}
return distances[dst] >= 1e9 + 7 ? -1 : distances[dst];
}
};
Але не розумію як реалізувати обмеження зупинок.
Має бути якийсь бектрекінґ абощо, проте фантазії на нього бракує.