【发布时间】:2017-08-02 18:46:59
【问题描述】:
我有一个项目涉及使用只能在 x,y 坐标上移动的机械手进行绘图。 对于给定的二进制图像,我使用 DFS 来探索它。 DFS 算法返回 DFS 已探索的点数组。该数组是路径。它工作正常。
问题在于该路径中有跳转(DFS 算法返回有跳转的路径)。例如:
00000000000
00001000000
00001000000
01111000000
00001000000
00001000000
00000000000
DFS 返回的路径符合预期,如下所示: (3,1)->(3,2)->(3,3)->(3,4)->(2,4)->(1,4)->(4,4) ->(5,4) 我的意图是不要在这条路径上跳转,所以我想创建一个函数/方法,该路径作为输入(带有跳转的路径,它是 DFS 的输出)并输出另一条路径,该路径由来自一个跳转点到另一个。 对于给定的示例,路径应该是这样的: (3,1)->(3,2)->(3,3)->(3,4)->(2,4)->(1,4)->(2,4) ->(3,4)->(4,4)->(5,4)
有什么好办法吗?
我尝试了一些方法,但是对于一个复杂的图像它有很大的问题(对于只有 2000 个点的 DFS 输出,当我尝试完成丢失的路线时,我得到至少 1000 万个点作为输出路径)。
该算法旨在以这种方式工作: 我遍历路径,当我看到当前点和最后一个点之间有一个跳转点时,我会原路返回,直到找到它。
有什么想法吗? 感谢您的宝贵时间!
稍后编辑:感谢您的宝贵时间!我发现我最好使用 bfs 来找到返回的最短路径,因为我实际上需要它让机器人尽可能少走几步。它效率不高(处理 640x480 二进制图像大约需要 5 秒),但效果很好(最后我得到了 DFS 输出点数的两倍,我认为这是合理的)。
【问题讨论】:
标签: algorithm