【发布时间】:2020-06-24 14:51:11
【问题描述】:
m 个航班连接了 n 个城市。每个航班从城市 u 出发,到达 v,价格为 w。
现在给定所有城市和航班,连同起始城市 src 和目的地 dst,您的任务是找到从 src 到 dst 最多 k 个停靠点的最便宜的价格。如果没有这样的路由,输出-1。
例如:
示例 1:
输入:
n = 3,
edges = [[0,1,100],[1,2,100],[0,2,500]]
src = 0, dst = 2, k = 1
输出:200 解释: 图表如下所示:
这是我的代码:
class Solution {
public:
int ans=INT_MAX;
int findCheapestPrice(int n, vector<vector<int>>& flights, int src, int dst, int K) {
vector<vector<vector<int>>>g;
for(auto f:flights)
{
int from=f[0];
int to=f[1];
int cost=f[2];
g[from].push_back({to,cost});
}
queue<vector<int>>q;
q.push({src,0,-1});
while(!q.empty())
{
vector<int>curr=q.front();
q.pop();
int currCity=curr[0];
int currCost=curr[1];
int currK=curr[2];
if(currCity == dst)
{
ans=min(currCost,ans);
continue;
}
for(auto x:g[currCity])
{
if(currK+1<=K && currCost+x[1]<ans)
{
q.push({x[0],currCost+x[1],currK+1});
}
}
}
if(ans == INT_MAX)
{
return -1;
}
return ans;
}
};
我曾经使用过 BFS 算法。
但是我得到了以下错误:
第 924 行:字符 9:运行时错误:引用绑定到类型为 'std::vector<:vector std::allocator>, std::allocator<:vector> > >' (stl_vector.h) 摘要:UndefinedBehaviorSanitizer:未定义行为 /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/bits/stl_vector.h :933:9
我无法找出哪里出错了。
谢谢。
【问题讨论】:
-
g[from].push_back({to,cost});是 UB,因为g是empty()。可能还有更多问题。
标签: c++ data-structures graph breadth-first-search