大多数情况下,当实施诸如A *的寻路算法时,我们寻求最小化沿路径的旅行成本。我们还可以寻找具有最少匝数的最佳路径。这可以通过具有位置方向状态网格而不是具有位置状态网格来完成。对于旧网格中的任何给定位置,我们将在该点中具有4个状态,表示该位置向左,向右,向上或向下移动。也就是说,如果您正在扩展到上面的节点,您实际上会将该节点的“up”状态添加到优先级队列,因为我们在启动时找到了到此节点的最快路径。无论如何,如果你正朝着那个方向前进,我们就不会增加任何重量。但是,如果我们必须从当前节点转到扩展节点,我们会在重量上添加一个小的epsilon,这样如果它们的匝数不同,距离中的两条最短路径的成本将不相等。只要epsilon <&lt;&lt;在节点之间移动的成本,它仍然是最短的路径。
我现在提出类似的问题,但有轻松的约束。我不再希望找到最短的路径,甚至不是最少转弯的路径。我唯一的目标是找到一个长度为numTurns&lt; = n的路径。为了澄清,该算法的目标是回答这个问题:
“从位置A到B是否存在路径P,使得小于或等于n圈?”
我在问这里是否使用某种贪婪算法会有所帮助,因为我不需要最小距离也不需要转弯。问题是,如果我没有找到最小值,算法可能会搜索板上更多的方块。也就是说,通常最短路径算法搜索它所具有的最小数量的平方,这是性能的关键。
是否有任何技术可以提供一种有效的方法(与A *更好或相同)来找到这样的路径?同样,具有最少转弯的A *为距离和#turns提供了“最佳”解决方案。但是对于我的问题,“最佳”是函数可以返回的最快方式,无论在A和B之间是否有&lt; = n转弯的路径。注意路径中可能存在障碍物,但除此之外,从一个路径移动平方到另一个是相同的成本(除非转弯,如上所述)。
我一直在集思广益,但除了转向状态的A *之外我什么也想不到。可能不可能比这更好,但我认为可能会巧妙地利用我放松的条件。我甚至考虑只使用numTurns作为移动电路板的成本,但这可能会浪费大量时间来搜索死路径。非常感谢!
编辑:最终澄清 - 路径不必具有最少的转弯次数,只需&lt; = n。路径不一定是最短的路径,如果它只有n个转弯,它可以是一条巨大的路径。目标是让这个功能快速执行,我甚至不需要记录路径。我只需要知道是否存在一个。谢谢:))