假设您有 3 个顶点:S、A 和 B。现在,假设我们需要找到从 S 通过 A 和 B 的最短路径。最简单的方法是找到离 S 更近的点:A 或B. 如果你的图实际上有一些空间数据,你可以使用顶点的坐标来近似,否则,你必须得到从 S 到每个目的地的最短路径。选择最近的目的地,在这种情况下,假设是 A,然后前往那里。现在你唯一可以去的地方是 B。计算从 A 到 B 的最短路径,然后去那里。
现在,在有两个以上目的地的情况下,您可以递归地执行此操作。我不懂 C++,但这里有一些伪代码可以帮助你入门
function pathThrough(startNode,destinationNodes[])
closestNode = getClosestNode(startNode,destinationNodes)
newDestinations = removeFromArray(destinationNodes,closestNode)
return joinPaths(getShortestPath(startNode,closestNode),pathThrough(closestNode,newDestinations.))
对于最接近的节点和 getShortestPath 函数,您可以使用任何适合您的图形的搜索算法、A*、dijkstra 算法,...