使用段阻塞查找两点之间的最短距离
Finding shortest distance between two points with segments blocking
我需要找到平面中端点 A, B
之间的最短欧几里德距离,受限于有一组 N 段 S=[S1,S2,...]
我的欧几里德路径不能相交。
我可以想象一种递归方法,首先 "guesses" A,B
之间的直线,然后检查与线段 s
的任何交点,改变绕行的路径 s
,然后在新端点上递归调用相同的算法。这似乎有运行时间 O(2^N),因为有 2 种方法可以绕过每个段。
这是我正在研究的旅行商问题的一个子问题。
编辑:如果两个段共享一个端点,这个点是可以通过的。
构造一个图G
,其顶点是A
、B
和线段的2N
端点。当且仅当两点之间的直线不与任何其他边相交时,用一条边连接两点。
现在使用A* search来寻找最短路径。
我需要找到平面中端点 A, B
之间的最短欧几里德距离,受限于有一组 N 段 S=[S1,S2,...]
我的欧几里德路径不能相交。
我可以想象一种递归方法,首先 "guesses" A,B
之间的直线,然后检查与线段 s
的任何交点,改变绕行的路径 s
,然后在新端点上递归调用相同的算法。这似乎有运行时间 O(2^N),因为有 2 种方法可以绕过每个段。
这是我正在研究的旅行商问题的一个子问题。
编辑:如果两个段共享一个端点,这个点是可以通过的。
构造一个图G
,其顶点是A
、B
和线段的2N
端点。当且仅当两点之间的直线不与任何其他边相交时,用一条边连接两点。
现在使用A* search来寻找最短路径。