【发布时间】:2016-08-20 05:11:40
【问题描述】:
我正在为 3D 游戏编写一个系统,该系统允许相机在节点网络之间移动。
在我的项目中,我编写了一个代表节点的类。与二元节点类不同,每个节点只能有一个父节点,但可以有任意数量的子节点。 使用我的真正了不起的绘画技巧,我开发了一个代表这些节点网络的图像:
在本例中,“根节点”为红色,黄色路径最短,蓝色路径最长。
这里要注意的重要一点是,实际的子节点的数量并不重要,而是添加的路径长度他们。因此,在计算最短路径时不需要使用启发式算法,因为最短路径的组合长度最短。
那么你将如何编写一个递归函数来遍历这棵树,并返回最短路径?
更新
尽管我的绘画技巧很棒,但我觉得它并不能完全说明我的问题,也许需要更详细的解释......
首先,这是针对 3D 世界空间中的相机系统。世界将充满一堆这样的节点,相机将被放置在其中一个节点上。玩家可以向任何方向看,但不能在不向给定方向单击鼠标的情况下移动。一旦发生点击事件,就会向他所面对的方向发射光线投射,检索他与距离他的X 之间的节点列表。这里的目标是找到连接到他的最远节点,然后找到到达那里的最短路径......
所以第一个问题实际上是检查最远的“命中”节点是否实际上比下一个最近的“命中”节点更快。最远的节点可能包含实际上比它前面的节点长 的路径,所以我还需要某种方法来检查这一点。所以心中有一个目标,但目标可能更改为稍微靠近一点的节点,让事情变得更加复杂。
是的,虽然节点可能只有一个父节点(如上所述),但这个“树”实际上应该可以从网络中的任何节点向任何方向遍历,将玩家当前所在的节点视为“根” " 节点。
【问题讨论】:
-
我们可以提供How to find the shortest simple path in a Tree in a linear time? 的副本还是您的问题还有更多?
-
构建图形的 Dijkstras 算法将为您修复它。看看吧。我不久前做过这个,它就像一个魅力。它找到任意两个节点之间的最短路径,并告诉要遵循的节点/路径是什么。但是我错过了绘画技巧
-
也许您想查看Dijkstra's algorithm 的维基百科页面。它还有一个很好的动画。唯一的区别是,不是在到达目标节点时终止,而是在任何叶子节点上终止。
-
我不明白你想要什么。你想计算所有孩子的路径吗?然后不管你使用什么算法,选择任何算法(深度优先,广度优先)。如果你想找到两个给定节点之间的最短路径,那么“最短”部分是无关紧要的:因为任何节点只能有一个父节点(它是一棵树),所以只有一条路径。一或零。我是不是误会了什么?附言你的绘画技巧很棒:)
-
@freeNick 每个连接都有权重。所以每条路径都有不同的值:连接权重之和
标签: c++ path-finding unreal-engine4