我进行了寻路库。 QuickGraph,开放图形库,符合我的所有要求,但我遇到了一个问题。我需要最短路径算法来跳过当前移动代理无法通过的边缘。我想要的是这样的:
Func<SEquatableEdge<VectorD3>, double> cityDistances = delegate(SEquatableEdge<VectorD3> edge)
{
if(edge.IsPassableBy(agent))
return edgeWeight; // Edge is passable, return its weight
else
return -1; // Edge is impassable, return -1, which means, that path finder should skip it
};
Func<VectorD3, double> heuristic = ...;
TryFunc<VectorD3, IEnumerable<SEquatableEdge<VectorD3>>> tryGetPath = graph2.ShortestPathsAStar(cityDistances, heuristic, sourceCity);
我可以想象通过创建图形副本并删除无法通过的边缘来解决这个问题,但这是不必要的浪费计算机资源。请问,我可以提示我如何解决这个问题?或者没有解决方案,我应该更新源?
答案 0 :(得分:0)
鉴于您的权重属于double
类型,您应该可以使用double.PositiveInfinity
来获得无法通行的边缘的权重。
正如Eric Lippert所说,高权重的失败案例是一条完整的道路,但double.PositiveInfinity
的任何加法或减法都应该是无限的。 double
类型有IsPositiveInfinity
方法可供测试。
因此,尝试将无法通过的权重设置为无穷大并测试最终路径长度。