![]() |
1
4
据我所知,地图中的“-”字段是图形节点。每个“-”节点与相邻的“-”字段最多有8个边。8如果允许对角线移动,否则只有4个相邻的“-”节点有效。“-”节点和“”节点之间没有边缘。 这足以实现一个简单的深度优先搜索/广度优先搜索,其中保留一个未访问的节点队列(深度优先的LIFO,广度优先的FIFO)和一个访问的节点列表(以避免循环)。这两种算法都将相对低效,但可以很容易地加以改进。 我不知道“+”节点的含义是什么。从一个“+”模式移动到下一个“+”模式是自由移动吗?如果是这样,您可以使用边缘成本对此进行建模。从“-”节点移动或移动到“+”节点的成本为1,从“+”节点移动到“+”节点的成本为0。 宽度优先搜索算法可以扩展到Dijkstra的算法,该算法计算源和目标之间的最短路径,只要所有图边都为非负: http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm Dijkstra算法可以通过添加一个简单的启发式算法来进一步改进,使其成为 A* algorithm .如果目标的坐标是二维坐标,则可以使用节点和目标之间的欧几里得距离粗略估计哪个节点最适合跟踪。如果“+”字段是通过地图的隧道,移动成本为零,则A*算法可能没有多大帮助,因为如果您应该向隧道移动,则启发式向目标移动通常是错误的。如果有多个隧道或隧道没有通向您的目的地,那么可能没有比naive dijkstra算法更好的启发式算法。 请注意,成本最低的路线不可能包含一个回路:如果成本最低的路线包含一个回路,则剥离回路仍然会产生一个有效的路线,以实现成本较低的目标,这与我们从成本最低的路线开始的假设相矛盾。 看一看 Cormen's Introduction to Algorithms 或相关的维基百科页面: http://en.wikipedia.org/wiki/Shortest_path http://en.wikipedia.org/wiki/Breadth-first_search |
|
Robert King · Unity C#语法问题-转换位置 1 年前 |
![]() |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
|
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
![]() |
i_sniff_ket · 在unity之外使用unity类 2 年前 |