我知道兼容的启发式方法是在这些情况下的一种:h(n(< = c(n,a,n'( h(n'(。
和可允许的启发式方法处于状态:0< = h(n(< =实际成本。但是,我不知道该如何检查此启发式方法是否兼容:
一个经纪人住在NXN GRIDWORLD中。代理人的当前位置由代表行的元组(xa; ya(给出当前的列。代理想要达到的目标位置由元组(XG; YG(表示。代理只能一次向上移动,向下,左或右1平方。
h(a(=(xa -xg( (ya -yg(
我可以有一些提示吗?非常感谢。
对于*探路,据我所知,在您的情况下,出租车距离是一个很好的启发式。更多信息在这里:https://en.wikipedia.org/wiki/a* _search_algorithm。
编辑:正如@feixiang正确指出的那样,在您的情况下,您应该使用出租车驾驶室距离,也称为曼哈顿距离正确的。
如果(Xa, Ya)
是您在网格Point a
中的当前位置,而(Xb, Yb)
是您的目的地Point b
,那么您将计算曼哈顿距离为以下内容。
typedef std::pair<int, int> Point;
unsigned manhattanDistance(const Point &a, const Point &b)
{
return abs(a.first - b.first) + abs(a.second - b.second);
}
互联网上有很多资源来帮助a*搜索算法,因此开始访问书籍并祝你好运!