gpt4 book ai didi

c# - QuickGraph - 如何让 A* 跳过特定的边?

转载 作者:太空狗 更新时间:2023-10-29 23:51:53 28 4
gpt4 key购买 nike

我进行路径查找库。 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);

我可以想象通过创建图形的副本并删除不可通过的边来解决这个问题,但这是不必要的计算机资源浪费。请问有人可以提示我如何解决这个问题吗?还是没有解决方案,我应该更新源代码?

最佳答案

鉴于您的权重是 double 类型,您应该能够使用 double.PositiveInfinity 作为不可通过边的权重。

正如 Eric Lippert 所说,高权重的失败案例是一条完整的路径,但是 double.PositiveInfinity 的任何加法或减法仍然应该是无穷大。 double 类型有一个要测试的 IsPositiveInfinity 方法。

因此,尝试将不可通过的权重设置为无穷大并测试最终的路径长度。

关于c# - QuickGraph - 如何让 A* 跳过特定的边?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14305495/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com