algorithm - 以任何顺序使用航点进行寻路
问题描述
我有一个 2d 区域中的航点列表(2d 点列表)。
我想要至少一次访问任何航点的最短路径。
访问顺序无关紧要
我必须暴力破解吗?
- 计算所有点之间的距离
- 走过任何一条路。
- 返回最短的
解决方案
您的问题是Hamiltonian Path / Traveling Salesman Problem的变体。
这些问题是NP-Complete,但如果“路点”的数量相对较少,您可以在完成一些预处理后以暴力方式解决它。
首先,创建一个新图:
G'=(V',E', w') Where
V' = {v | v is a waypoint }
E' = { (u,v) for all u,v in V' }
w'(u,v) = D(u,v) (where D is a function for shortest path between waypoints in the original graph) (D:VxV->R)
您可以使用全对全最短路径算法(例如Floyd-Warshall )来创建 w' 。这是在O(|V|^3)
.
拥有它之后,运行蛮力(O(n!)
,其中n
是航点的数量)或动态编程(O(2^n*n)
),以解决您遇到的旅行商问题。
推荐阅读
- qt - 如何更改 QML WebEngineView URL 错误页面
- python - 如何将 12 小时字符串转换为 24 小时日期时间?
- php - 无法与站点通信以检查致命错误
- nextcloud - 当文件夹名称包含特定单词(如 Hazlo)时,通过 MKCOL 在 nextcloud 上创建文件夹时出现错误请求
- algorithm - 根据内部 5x5 值填充 7x7 网格
- vbscript - VBScript 求和
- ios - 如何使用 resizeAspectFill 在 watchOS 上播放视频?
- xtermjs - 如何在 xtermjs 中设置缓冲区的大小?
- python - 从不同的脚本登录到同一个文件?
- python - 网络抓取时如何维护与同一主机的多个会话?