如何在给定的DFS输出中找到两点之间的最短路径

时间:2017-08-02 18:47:00

标签: algorithm

我有一个涉及用机器人手绘图的项目,只能在x,y坐标上移动。 对于给定的二进制图像,我使用DFS来探索它。 DFS算法返回DFS探索过的点阵列。那个数组是路径。它工作正常。

问题是该路径中存在跳转(DFS算法返回跳转路径)。例如:

00000000000
000.01亿个
000.01亿个
011.11亿个
000.01亿个
000.01亿个
00000000000

DFS返回的路径是预期的,如下所示: (3,1) - >(3,2) - >(3,3) - >(3,4) - >(2,4) - >的(1,4) - &GT ;(4,4) - >(5,4) 我的目的是不要在这条路径中跳转,所以我想创建一个函数/方法,该路径具有输入此路径(具有跳转的路径,这是DFS的输出)并输出另一条路径,该路径由路径完成一个跳跃指向另一个。 对于给定的示例,路径应为: (3,1) - >(3,2) - >(3,3) - >(3,4) - >(2,4) - >的(1,4) - &GT ;(2,4) - >(3,4) - >(4,4) - >(5,4)

有没有好办法呢?

我尝试了一些东西但是对于一个复杂的图像它有很大的问题(对于DFS的输出只有2000点,当我尝试完成丢失的路线时,我得到至少1000万点作为输出路径)。 / p>

该算法旨在以这种方式工作: 我遍历路径,当我看到当前点和最后一点之间的跳跃点时,我回到我的方式,直到找到它。

有什么想法吗? 谢谢你的时间!

稍后编辑:谢谢您的时间!我想通了我最好用bfs来找回最短的路径,因为我实际上需要它让机器人尽量少走几步。效率不是很高(处理一个640x480的二进制图像大约需要5秒钟),但效果非常好(最后我得到DFS输出的点数的两倍,我认为合理)。

1 个答案:

答案 0 :(得分:0)

如果您决定使用DFS来寻找路径,那么您的解决方案是最好的,但是如您所描述的那样找到机器人手臂绘制点的最短路径的问题是NP难的,因为它是NP的变体。旅行推销员问题。

话虽这么说,通过搜索绘图仪算法或阅读图论书,可以找到解决这个问题的最快算法。

这些算法使用与旅行推销员的解决方案类似的想法,其中使用欧拉旅行和匹配来找到最短路径。