我开始使用boost图库。我需要一个最好的搜索,我可以使用astar_search实现零成本。 (如果我错了,请纠正我。)
但是,我想知道是否还有其他可能性呢?如果不考虑成本,算法应该稍微更高效。
编辑:很抱歉描述不清楚。我实际上正在实施潜在的字段搜索,所以我没有与边缘相关的任何成本/权重,而是需要进行最速下降搜索(可以克服局部最小值)。感谢任何提示!
答案 0 :(得分:1)
你绝对可以使用A *来解决这个问题;您需要 h(x)为0,而不是 g(x)。 A *基于F对节点进行评级,由
定义F(n) = g(n) + h(n).
TotalCost = PathCost + Heuristic.
g(n)=路径成本,从初始状态到当前状态的距离
h(n)=启发式,从当前状态到结束状态的成本估计。
来自Wikipedia:
Dijkstra的算法,另一种算法 最好的第一次搜索的例子 算法,可以视为特殊的 A *的情况,其中h(x)= 0表示所有x。
答案 1 :(得分:1)
如果您对C ++感到满意,我建议您尝试YAGSBPL。
答案 2 :(得分:0)
根据Aphex的回答,您可能想要使用Dijkstra的算法;设置边权重的一种方法是将w(u, v)
设置为potential(v) - potential(u)
,假设它是非负的。 Dijkstra的算法假设边缘权重为正,因此当您离开源节点时距离会增加。如果您正在寻找最小的潜力,请翻转减法的两侧;如果你有潜力上下都可能需要使用像贝尔曼 - 福特那样不是最好的东西。