标签:red pes connected solution like vat ica 技术分享 for
There are n
cities connected by m
flights. Each fight starts from city u
and arrives at v
with a price w
.
Now given all the cities and flights, together with starting city src
and the destination dst
, your task is to find the cheapest price from src
to dst
with up to k
stops. If there is no such route, output -1
.
Example 1: Input: n = 3, edges = [[0,1,100],[1,2,100],[0,2,500]] src = 0, dst = 2, k = 1 Output: 200 Explanation: The graph looks like this:
The cheapest price from city 0 to city 2 with at most 1 stop costs 200, as marked red in the picture.
Example 2: Input: n = 3, edges = [[0,1,100],[1,2,100],[0,2,500]] src = 0, dst = 2, k = 0 Output: 500 Explanation: The graph looks like this:
The cheapest price from city 0 to city 2 with at most 0 stop costs 500, as marked blue in the picture.
Note:
n
will be in range [1, 100]
, with nodes labeled from 0
to n
- 1
.flights
will be in range [0, n * (n - 1) / 2]
.(src,
dst
, price)
.[1, 10000]
.k
is in the range of [0, n - 1]
.
Approach #1: C++. []DFS
class Solution { public: int findCheapestPrice(int n, vector<vector<int>>& flights, int src, int dst, int K) { unordered_map<int, vector<pair<int, int>>> graph; for (auto flight : flights) { int s = flight[0], e = flight[1], p = flight[2]; graph[s].push_back(make_pair(e, p)); } unordered_set<int> seen; dfs(graph, seen, src, dst, K, 0, 0); return ans == INT_MAX ? -1 : ans; } void dfs(unordered_map<int, vector<pair<int, int>>>& graph, unordered_set<int> seen, int src, int dst, int K, int t, int p) { if (t > K+1) return ; if (src == dst) { ans = p; return ; } seen.insert(src); for (auto v : graph[src]) if (!seen.count(v.first) && p + v.second < ans) dfs(graph, seen, v.first, dst, K, t+1, p+v.second); } private: int ans = INT_MAX; };
Analysis:
In this solution, The important point is p + v.second < ans.
787. Cheapest Flights Within K Stops
标签:red pes connected solution like vat ica 技术分享 for
原文地址:https://www.cnblogs.com/ruruozhenhao/p/10160736.html