LeetCode 787. K 站中转内最便宜的航班
最短路
const int N = 110;
int dist[N];
int back[N];
class Solution {
public:
vector<vector<int>> e;
int bellman_ford(int src, int dst, int k)
{
int m = e.size();
// cout << m << endl;
memset(dist, 0x3f, sizeof dist);
dist[src] = 0;
for(int i = 0; i <= k; i ++)
{
memcpy(back, dist, sizeof dist);
for(int j = 0; j < m; j ++)
{
int a = e[j][0], b = e[j][1], w = e[j][2];
// cout << a << b <<w << endl;
dist[b] = min(dist[b], back[a] + w);
}
}
return dist[dst];
}
int findCheapestPrice(int n, vector<vector<int>>& flights, int src, int dst, int k) {
e = flights;
int t = bellman_ford(src,dst, k);
if(t >= 0x3f3f3f3f / 2) return -1; //可能更新了,但是不能到达
else return t;
}
};