Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何计算X内的所有节点?_C#_Path Finding - Fatal编程技术网

C# 如何计算X内的所有节点?

C# 如何计算X内的所有节点?,c#,path-finding,C#,Path Finding,我试图实现一个寻路算法,但我认为我遇到了术语问题,因为我不太确定如何解释我需要该算法做什么 我有一个规则的节点网格,我试图找到某个“曼哈顿距离”内的所有节点 比如说,在5中查找节点就足够简单了 但我对“加权曼哈顿距离”感兴趣,在这里,某些正方形的“成本”是进入的两倍(或更多)。例如,如果输入橙色方块需要2美元,输入紫色方块需要10美元,我感兴趣的图形如下所示: 首先,这有一个术语吗?当你不完全确定事物的名称时,很难找到它们的信息 其次,我如何计算哪些节点属于我的参数范围?我不是在寻找一个完

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

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

比如说,在5中查找节点就足够简单了

但我对“加权曼哈顿距离”感兴趣,在这里,某些正方形的“成本”是进入的两倍(或更多)。例如,如果输入橙色方块需要2美元,输入紫色方块需要10美元,我感兴趣的图形如下所示:

首先,这有一个术语吗?当你不完全确定事物的名称时,很难找到它们的信息


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

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

至于算法,Dijkstra的算法可能就是你想要的。基本的想法是保持到目前为止你已经找到的每个方块的最小成本,以及下一个要探索的最佳方块的优先队列


与传统的Dijkstra不同的是,在找到每个正方形的最小路径之前,您会一直在进行,如果到它们的距离太长,您会希望停止向队列中添加节点。完成后,您将有一个所有方块的列表,其中从起始方块开始的最短路径最多为
x
,这听起来像是您想要的。

您可能最好使用Dijkstra的加权图算法,如下所述: (页面中间附近有算法说明。)


在你的例子中,曼哈顿距离可能只是意味着你不想要图中的对角线路径。

Eric Lippert提供了一个关于用C编写A-*路径查找算法的优秀博客系列,这里:

第1部分:

第2部分:

第3部分:


第4部分:

A*在您没有搜索特定目标时并不适用。@锑:对算法的更改非常小,EL描述的工具箱与实现Dijkstra的工具箱完全相同。一种是将启发式设置为以相同的方式返回0,当您声明更改终止条件并返回闭合集时。