我制作了一个A *探路者,看看它是否适用于我正在尝试做的事情,但我认为它不够好 .
我的网格不是太大而且有一些硬编码点,所以我要做的就是只检查硬编码点以找到它们之间的路径;例如:
┌──────────┐ │A B│ ├───────── │ │D C│ └──────────┘
因此,从A点到D点,探路者功能应该告诉你从A - > B - > C - > D.
什么寻路算法适用于此?
对于单个查询,A *可能与您可以做的一样好 .
对于许多查询,您可以将网格转换为无向的加权图形,该图形仅由硬编码点组成,其中直接连接的点之间具有边缘,边缘权重是它们之间的距离 .
对于您的示例,图形看起来像:
9 A --- B | 2 D --- C 9
To construct this graph:
对于每个点只能直接到达其他几个点的矩阵,每个点的breadth-first search可能是最好的选择 .
如果任何一点可以得到许多其他点,那么我会想到一个算法或一些推导,尽管可能有更好的方法 .
To use this graph:
你可以在它上面运行A * .
假设您存储每个点的坐标,您仍然可以使用Manhattan distance作为启发式(假设您之前使用过) .
1 回答
对于单个查询,A *可能与您可以做的一样好 .
对于许多查询,您可以将网格转换为无向的加权图形,该图形仅由硬编码点组成,其中直接连接的点之间具有边缘,边缘权重是它们之间的距离 .
对于您的示例,图形看起来像:
To construct this graph:
对于每个点只能直接到达其他几个点的矩阵,每个点的breadth-first search可能是最好的选择 .
如果任何一点可以得到许多其他点,那么我会想到一个算法或一些推导,尽管可能有更好的方法 .
To use this graph:
你可以在它上面运行A * .
假设您存储每个点的坐标,您仍然可以使用Manhattan distance作为启发式(假设您之前使用过) .