我需要一个算法,可以给我一个从开始节点到结束节点的路径,但路径必须有一个确切的节点数,否则路径查找应该失败。
为了扩展,我有一个网格的瓷砖。移动只能到紧邻的上、下、左或右瓷砖(意思是,没有对角线移动)。对于路径中可以使用和不可以使用的平铺有许多规则,但大多数情况下可以归结为一个简单的bool来判断平铺是否可以使用(甚至可以在开始算法之前计算)。然而,给我带来麻烦的是,我有一个指定的路径必须有的距离,意思是,从一块瓷砖到邻近的瓷砖的每一次移动都是一个距离,整个路径应该有一个指定的距离,不多也不少。此外,一旦踩到了一个瓷砖(但在算法开始时所有瓷砖都可用),就不能再踩了,有点像玩老蛇游戏,你必须小心不要吃自己。
我看过Dijkstra/A*,也搜索过寻路算法,但据我所知,所有算法都集中在最短路径上,这对我没有多大好处。我不在乎它是哪条路,只要它遵循前面提到的规则就行了。
这里有一个例子,我说它必须是精确的距离,不能两次使用同一个瓷砖。
假设距离必须是7。现在让我们用O标记路径中可以使用的瓷砖,用和X标记不能使用的瓷砖,用S标记起点,用E标记目标。
X X X X X X X X O O E S O O X O O O O O O
如果没有距离限制,一个人可以离开,问题就解决了。如果有距离的限制,但没有“不能踩同一块瓷砖”的限制,一个人可以下一次,然后左,然后右,然后左,然后右,然后左,然后向上,到达目标。由于两者都有限制,一个人需要向右,向下,向左,向左,向左,向上,然后向右才能到达目标。然而,如果情况是这样,就没有有效的路径。
X X X X X X X X O O E S O O X X O O O X O
由于它是NP完全的,正如Haile所指出的,这里有一个启发式,以防你的问题足够小:
S
或E
的半岛(即图中仅由一个节点连接到其余部分的部分),并将其移除。S
到E
的最短路径P
。如果n
小于len(P)
,则没有解决方案。S
到E
进行深度优先搜索,使用下面的启发式来选择要首先挖掘的节点。让A
成为深度优先搜索中的当前平铺。在欧几里得几何学中,将A
的位置投影到(SE)
线上,并将此点称为A'
。尝试保持len(当前路径)/n
与len([sa'])/len([SE])
的比值。或者,在路径P
上“项目”A
以获得A''
,并使len(当前路径)/N
与len([sa'])沿着P)/len(P)
.我们不太了解您将要处理的确切情况,当然还有更多的启发式可以添加,以丢弃深度优先搜索树的部分。
我试图使用Scala类计算两点之间的距离。但它给出了一个错误说 类型不匹配;发现:其他。需要类型(具有基础类型点):?{def x:?}请注意,隐式转换不适用,因为它们是不明确的:在[A](x:A)类型的对象Predef中确保[A]的方法any2Ensuring和在[A](x:A)“ArroAssoc[A]类型的对象Predef中的方法Ani2ArrowasSoc都是可能的其他转换函数。输入到?{
假设我有一个无向多图,即一个(G,E)对,其中G是一个有限的结点集,E是一个有限的边集。我正在寻找一个算法,将分配一个单一的字符串值到每个节点在以下的约束。 1. 每个节点都被赋予一组约束(可能是空的),这些约束限制了允许的值。我希望至少支持以下类型的值约束: null 有两种类型的边缘: 不同, 相同, 这意味着应该为相关节点分配不同/相同的值(意味着不相等/相等的字符串)。 null 这意味着
问题内容: 我需要创建一个类来计算两点之间的距离。我被困住了,我是一个完全的初学者。这是我的课程: 第二课。 我不确定如何在两个定义的点之间获取点对象(中间点)。 我可以创建点对象,但不确定如何通过位于这两个点对象之间的方法返回点对象。 问题答案: 平面上的两个点(x1,y1)和(x2,y2)之间的距离为: 但是,如果您想要的只是两个点的中点,则应将中点函数更改为: 这将返回一个全新的点对象,其点
问题内容: 为了在地图上画一个圆,我有一个中心GLatLng(A)和一个半径(r)以米为单位。 这是一个图: 如何计算位置B的GLatLng?假设r平行于赤道。 使用GLatLng.distanceFrom()方法获得给定A和B时的半径是微不足道的-但反之则不然。似乎我需要做一些更重的数学运算。 问题答案: 我们将需要一种方法,该方法会在给定方位角和距源点的距离时返回目标点。幸运的是,克里斯·韦尼
主要内容:src/runoob/graph/Path.java 文件代码:图的寻路算法也可以通过深度优先遍历 dfs 实现,寻找图 graph 从起始 s 点到其他点的路径,在上一小节的实现类中添加全局变量 from数组记录路径,from[i] 表示查找的路径上i的上一个节点。 首先构造函数初始化寻路算法的初始条件,from = new int[G.V()] 和 from = new int[G.V()],并在循环中设置默认值,visited 数组全部为false,fr
我需要计算汽车行驶的距离!不是距离,不是距离到否。如果我们通过谷歌提供的API计算,距离可以完全不同。谷歌可以提供从一个点到另一个点的1公里距离,但汽车可以按照骑手想要的方式行驶800米。使用加速计没有帮助。它适用于步行,但绝不适用于更快的速度。 我尝试过使用Google的位置API:距离到或距离之间根本不是一个选项。它可以给出与IN REAL截然不同的结果。在真实的汽车中,可以通过非常短的地方并
问题内容: 我必须计算2个点之间的距离,X和Y是第一个点的坐标,而axisX和axisY是第二个点的坐标。我唯一的线索是此SQL语句,但是此SQL不会返回我要查找的结果。那么,有谁能帮助我确定我在此声明中可能犯的任何错误? 问题答案: 我假设axisX和axisY是您的坐标。这使用距离计算技术,可以为您提供更准确的读数。 http://www.meridianworlddata.com/Dista
问题内容: 我想使用GeoDjango或GeoPy根据方向和距离计算一个点。 例如,如果我的点是(-24680.1613,6708860.65389),我想使用Vincenty距离公式找出北1KM,东1KM,苏尔1KM和西1KM的点。 我能找到的最接近的东西是distance.py(https://code.google.com/p/geopy/source/browse/trunk/geopy/