C# 如何计算X内的所有节点?
我试图实现一个寻路算法,但我认为我遇到了术语问题,因为我不太确定如何解释我需要该算法做什么 我有一个规则的节点网格,我试图找到某个“曼哈顿距离”内的所有节点 比如说,在5中查找节点就足够简单了 但我对“加权曼哈顿距离”感兴趣,在这里,某些正方形的“成本”是进入的两倍(或更多)。例如,如果输入橙色方块需要2美元,输入紫色方块需要10美元,我感兴趣的图形如下所示: 首先,这有一个术语吗?当你不完全确定事物的名称时,很难找到它们的信息C# 如何计算X内的所有节点?,c#,path-finding,C#,Path Finding,我试图实现一个寻路算法,但我认为我遇到了术语问题,因为我不太确定如何解释我需要该算法做什么 我有一个规则的节点网格,我试图找到某个“曼哈顿距离”内的所有节点 比如说,在5中查找节点就足够简单了 但我对“加权曼哈顿距离”感兴趣,在这里,某些正方形的“成本”是进入的两倍(或更多)。例如,如果输入橙色方块需要2美元,输入紫色方块需要10美元,我感兴趣的图形如下所示: 首先,这有一个术语吗?当你不完全确定事物的名称时,很难找到它们的信息 其次,我如何计算哪些节点属于我的参数范围?我不是在寻找一个完
其次,我如何计算哪些节点属于我的参数范围?我不是在寻找一个完整的解决方案,当然,只是一些开始的提示;当我意识到我的实现需要三个
字典时,我开始认为可能有一种更简单的方法来处理事情。对于术语,基本上是要求在任意(正)加权图上一定距离内的所有点。使用不同的权重意味着它不再对应于特定的度量,例如曼哈顿距离
至于算法,Dijkstra的算法可能就是你想要的。基本的想法是保持到目前为止你已经找到的每个方块的最小成本,以及下一个要探索的最佳方块的优先队列
与传统的Dijkstra不同的是,在找到每个正方形的最小路径之前,您会一直在进行,如果到它们的距离太长,您会希望停止向队列中添加节点。完成后,您将有一个所有方块的列表,其中从起始方块开始的最短路径最多为x
,这听起来像是您想要的。您可能最好使用Dijkstra的加权图算法,如下所述:
(页面中间附近有算法说明。)
在你的例子中,曼哈顿距离可能只是意味着你不想要图中的对角线路径。Eric Lippert提供了一个关于用C编写A-*路径查找算法的优秀博客系列,这里:
第1部分:
第2部分:
第3部分:
第4部分:A*在您没有搜索特定目标时并不适用。@锑:对算法的更改非常小,EL描述的工具箱与实现Dijkstra的工具箱完全相同。一种是将启发式设置为以相同的方式返回0,当您声明更改终止条件并返回闭合集时。