沿着网格寻路,有扭曲

时间:2016-08-05 23:14:04

标签: java algorithm a-star

我一直绞尽脑汁想要找到一种方法来找到2d网格上2点之间的最短路径。我看过关于Lee和A *算法的帖子,但是没有人似乎能够回答我最突出的问题。如何使用这些算法来处理小数点坐标。

我见过的所有内容都是简单的整数。但是当你试图找到起点(3.3,4)和终点(5,4.6)之间的最短路径时会发生什么?

基本上我需要找到2点之间的最短路径,其中点包含小数,但你仍然必须遵循整数网格线。你不能沿对角线移动,只能沿着网格向北或向东移动,但是你不能在交叉点上开始或结束(如1,1)。

想象一个完美的城市,网格线(每个方格)之间的每个空间都是一个城市街区,网格线是您可以旅行的道路。

我是用Lee还是A *吠叫错误的树?我非常擅长寻路,我完全是自学成才。我知道在这一点上重新发明算法超出了我的范围,但是我正在查看我的80多个if语句并思考"这不能成为以有效方式处理寻路的方法。"使用if语句测试所有可能性几乎是不可能的。

欢迎任何想法或网站文章。提前致谢

1 个答案:

答案 0 :(得分:2)

A *搜索在这里仍然可以很好地工作。如果您还不熟悉图形的概念,我首先要查看它们并了解A *搜索在图形上的工作原理。关于A *的许多教程都专注于应用于网格的A *,但这只是算法工作原理的一个特例。它在一般图表上同样有效。

一旦您熟悉了常规图形结构,您需要对基于网格的A *或Dijkstra算法进行的修改才能适用于您的情况。您基本上只需添加表示起始位置和结束位置的新节点,并将它们与适当加权的边连接到四个附近的格点。从那里,您可以像往常一样运行A *。

如果您正在寻找一个起点,不久前我会教一个关于基本数据结构和图形算法的课程,并将some slides on Dijkstra's algorithm and A* search放在一起,这可能会为您提供一个很好的主题介绍。祝你好运!