Algorithm 如何为寻路算法优化大型图?

Algorithm 如何为寻路算法优化大型图?,algorithm,graph,graph-algorithm,pathfinder,Algorithm,Graph,Graph Algorithm,Pathfinder,我开发了一个小程序,用户可以在其中创建一个简单的图表,其中包含由线连接的抽象块,例如流程图或结构图。工作说明书的条款之一是,直线必须绕过其他块,并且在移动时不要与它们相交 插图 我尝试使用路径搜索算法,如 A*或李算法< /强>,并考虑一个工作空间(一个带有图元素的窗口),如一个图——一个像素是一个图形节点。但是,移动块会导致明显的时间延迟(例如,在大小为500x500的工作区中查找路径大约需要320-360 ms)。对于这些算法来说,这个图似乎太大了 你能告诉我如何减少这种情况下的节点数量吗

我开发了一个小程序,用户可以在其中创建一个简单的图表,其中包含由线连接的抽象块,例如流程图或结构图。工作说明书的条款之一是,直线必须绕过其他块,并且在移动时不要与它们相交

插图

我尝试使用路径搜索算法,如<强> A*<强>或<强>李算法< /强>,并考虑一个工作空间(一个带有图元素的窗口),如一个图——一个像素是一个图形节点。但是,移动块会导致明显的时间延迟(例如,在大小为500x500的工作区中查找路径大约需要320-360 ms)。对于这些算法来说,这个图似乎太大了


你能告诉我如何减少这种情况下的节点数量吗?也许有什么方法可以加速这些算法,或者使用其他方法来实现它

不要把这看成是一个图论问题,把它看成是一个物理问题

设想如下。每个木块都有一个特定的力将其拉向最后放置的位置。线段、块和图形的边以平方反比定律相互排斥(除非正在绘制的线的端点不排斥前面的块)。在足够的应力下,一条直线段可以分成更小的直线段,这些直线段对恢复直线具有拉力

动力学是复杂的,但实体的数量是您在屏幕上看到的对象的数量,而不是它所绘制的像素的数量。因此,您可以相对快速地进行更新


要获得良好的体验,您需要稍微玩一下动力学,但这应该是一种更容易处理的方法。

一个像素就是一个图形节点
-这是您的问题。一定有办法使它不那么颗粒状。我不太明白你的问题,所以我不能确切地说是怎么回事。@BlueRaja DannyPflughoeft据我所知,我不能使网格(这里的工作区图形被视为网格)更精细,因为障碍物的最小大小是1x1(块之间的线的一部分)可能是跳点搜索?它擅长于大面积的开放区域扫描块相交?如果我错了,请纠正我,但可能有更简单的方法解决你的问题。如果块不能相交,用户移动一个块,那么他通过移动块创建的路径可以是连接两个块的线。另外,这里还提到了一些为此目的预定义的工具——这类问题可能与示例图像有关,即使它们只是MS Paint中的快速草图。