class Solution {
public:
int findCheapestPrice(int n, vector<vector<int>>& flights, int src, int dst, int K) {
vector<int> distance(n, INT_MAX);
vector<list<pair<int, int>>> edges(n);
distance[src] = 0;
queue<int> q;
list<pair<int, int>>::iterator it;
for (int i = 0; i < flights.size(); i++) {
int s = flights[i][0];
int t = flights[i][1];
int cost = flights[i][2];
edges[s].push_back(make_pair(t, cost));
}
q.push(src);
int remain = K;
while (remain-- >= 0) {
int count = q.size();
for (int i = 0; i < count; i++) {
int now = q.front(); q.pop();
for (it = edges[now].begin(); it != edges[now].end(); it++) {
if ((distance[now] + it->second) < distance[it->first]) {
distance[it->first] = (distance[now] + it->second);
q.push(it->first);
}
}
}
}
return distance[dst] == INT_MAX ? -1 : distance[dst];
}
};
留言
張貼留言