我正在尝试实现一个寻路算法,但我认为我遇到了术语问题,因为我不太清楚如何解释我需要算法做什么。
我有一个常规的节点网格,我试图找到某个“曼哈顿距离”内的所有节点。
查找5中的节点很简单。
但我对“加权曼哈顿距离”感兴趣,其中某些广场“花费”两倍(或更多)进入。例如,如果橙色方块的成本为2,紫色方块的成本为10,那么我感兴趣的图形如下所示:
首先,有一个术语吗?当你不能完全确定他们最初被称为什么时,很难查找有关事物的信息。
其次,如何计算哪些节点属于我的参数?我不是在寻找一个完整的解决方案,只是一些提示才能开始;当我意识到我的实现需要三个Dictionary
时,我开始认为可能有一种更简单的处理方式。
答案 0 :(得分:2)
对于术语,您基本上要求在任意(正)加权图上的某个距离内的所有点。使用不同的权重意味着它不再对应于特定的度量,例如曼哈顿距离。
至于算法,Dijkstra的算法可能就是你想要的。基本的想法是保持到目前为止找到的每个方格的最低成本,以及下一个要探索的最佳方块的优先级队列。
与传统的Dijkstra不同,在你找到每个方块的最小路径之前,你会继续前进,如果与它们的距离太长,你就会停止向队列中添加节点。完成后,您将获得所有正方形的列表,其中起始正方形的最短路径最多为x
,这听起来就像您想要的那样。
答案 1 :(得分:1)
你可能最好使用Dijkstra算法和加权图,如下所述: http://www.csl.mtu.edu/cs2321/www/newLectures/29_Weighted_Graphs_and_Dijkstra's_Algorithm.html (页面中间附近有算法描述。)
在你的情况下曼哈顿距离可能只是意味着你不想要图中的对角线路径。
答案 2 :(得分:1)
Eric Lippert提供了一篇关于在C#中编写A- *路径查找算法的精彩博客系列:
第1部分:http://blogs.msdn.com/b/ericlippert/archive/2007/10/02/path-finding-using-a-in-c-3-0.aspx
第2部分:http://blogs.msdn.com/b/ericlippert/archive/2007/10/04/path-finding-using-a-in-c-3-0-part-two.aspx
第3部分:http://blogs.msdn.com/b/ericlippert/archive/2007/10/08/path-finding-using-a-in-c-3-0-part-three.aspx
第4部分:http://blogs.msdn.com/b/ericlippert/archive/2007/10/10/path-finding-using-a-in-c-3-0-part-four.aspx