我正在编写一个3D游戏系统,允许摄像机在节点网络之间移动。在我的项目中,我编写了一个代表节点的类。与二叉节点类不同的是,每个节点只能有一个父节点,但可以有任意数量的子节点。使用我的"真正惊人的"绘画技能,我开发了一张图像来表示这些节点的网络。在这个例子中,“根节点”是红色的,黄色路径是最短的,蓝色路径是最长的。重要的是要注意实际的子节点数量并不重要,而是它们之间路径的长度。因此,在计算最短路径时不需要使用启发式算法,因为最短路径将具有最小的组合长度。那么,如何编写递归函数遍历这棵树,并返回最短路径呢?
更新:尽管我的绘画技能很惊人,但我觉得它并没有完全说明我的问题,可能需要更详细的解释。首先,这是用于三维世界空间中的相机系统。世界将充满大量这些节点,并且相机将放置在其中一个节点上。玩家可以向任何方向查看,但不能移动,除非点击鼠标指定方向。一旦出现单击事件,就会沿着他面对的方向发射一条射线,检索出他和X距离之间的节点列表。这里的目标是找到与他连接的最远的节点,然后找到到达那里的最短路径。因此,第一个问题实际上是检查最远的“命中”节点是否比下一个最接近的“命中”节点更快地到达。最远的节点可能包含一条实际上比它前面的节点更长的路径,因此我还需要一些检查的方法。因此,虽然节点只能有一个父节点(如上所述),但应该可以从网络中的任何节点以任何方向遍历这个“树”,将玩家当前所处的节点视为“根”节点。
更新:尽管我的绘画技能很惊人,但我觉得它并没有完全说明我的问题,可能需要更详细的解释。首先,这是用于三维世界空间中的相机系统。世界将充满大量这些节点,并且相机将放置在其中一个节点上。玩家可以向任何方向查看,但不能移动,除非点击鼠标指定方向。一旦出现单击事件,就会沿着他面对的方向发射一条射线,检索出他和X距离之间的节点列表。这里的目标是找到与他连接的最远的节点,然后找到到达那里的最短路径。因此,第一个问题实际上是检查最远的“命中”节点是否比下一个最接近的“命中”节点更快地到达。最远的节点可能包含一条实际上比它前面的节点更长的路径,因此我还需要一些检查的方法。因此,虽然节点只能有一个父节点(如上所述),但应该可以从网络中的任何节点以任何方向遍历这个“树”,将玩家当前所处的节点视为“根”节点。