【问题标题】:How can I calculate all nodes within X?如何计算 X 内的所有节点?
【发布时间】:2013-04-21 21:56:20
【问题描述】:

我正在尝试实现一种寻路算法,但我认为我遇到了术语问题,因为我不太确定如何解释我需要该算法来做什么。

我有一个规则的节点网格,我试图找到某个“曼哈顿距离”内的所有节点。

在 5 内查找节点非常简单。

但我对“加权曼哈顿距离”感兴趣,其中某些方格“花费”两倍(或更多)进入。例如,如果橙色方块花费 2,紫色方块花费 10,我感兴趣的图表如下所示:

首先,这个有术语吗?当您一开始并不完全确定事物的名称时,很难查找有关事物的信息。

其次,我如何计算哪些节点属于我的参数?我不是在寻找一个完整的解决方案,只是一些开始的提示;当我意识到我的实现需要三个 Dictionarys 时,我开始认为可能有一种更简单的处理方式。

【问题讨论】:

    标签: c# path-finding


    【解决方案1】:

    对于术语,您基本上是在任意(正)加权图上询问一定距离内的所有点。使用不同的权重意味着它不再对应于特定的度量标准,例如曼哈顿距离。

    至于算法,Dijkstra 的算法可能就是你想要的。其基本理念是保持您目前找到的每个方格的最低成本,以及接下来要探索的最佳方格的优先级队列。

    与传统的 Dijkstra 不同,您会一直走下去,直到找到通往每个方格的最小路径,如果与节点的距离太长,您将希望停止将节点添加到队列中。完成后,您将获得所有从起始方格到最短路径最多为x 的方格的列表,这听起来像是您想要的。

    【讨论】:

      【解决方案2】:

      【讨论】:

      • A* 在您不搜索特定目标时并不真正适用。
      • @Antimony:算法的改动很小,EL 描述的工具包与实现 Dijkstra 的工具包相同。一个将启发式设置为返回相同的 0,并在您声明时更改终止条件并返回封闭集。
      【解决方案3】:

      您可能最好使用带加权图的 Dijkstra 算法,如下所述: http://www.csl.mtu.edu/cs2321/www/newLectures/29_Weighted_Graphs_and_Dijkstra's_Algorithm.html (页面中间附近有算法说明。)

      在您的情况下,曼哈顿距离可能只是意味着您不想要图中的对角线路径。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-08-16
        • 2016-06-02
        • 1970-01-01
        • 1970-01-01
        • 2013-03-13
        • 1970-01-01
        • 2019-08-26
        相关资源
        最近更新 更多