使用段阻塞查找两点之间的最短距离

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,其顶点是AB和线段的2N端点。当且仅当两点之间的直线不与任何其他边相交时,用一条边连接两点。

现在使用A* search来寻找最短路径。