Algorithm 最短路径所需的最少道路:多源、单个目标,每个源的最短路径

Algorithm 最短路径所需的最少道路:多源、单个目标,每个源的最短路径,algorithm,graph-algorithm,dijkstra,traveling-salesman,Algorithm,Graph Algorithm,Dijkstra,Traveling Salesman,我有一个问题是这样的:找到了部分解决方案 我想计算将所有来源(黄色)连接到目的地(绿色)所需的最小道路数。但是,我还希望确保从每个源到目标有最小的路径长度。 对角线的移动成本与上/下/左/右相同 贪婪不起作用,它不能保证最小总道路数,还有其他建议吗? 图中显示了从每个源到目标的可能最小路径,重叠显示为较大的圆圈 编辑:贪婪示例失败: 可以有多个目的地吗?你需要最佳的解决方案还是“好”的解决方案?(这是尖叫声吗?)。如果最优和近似最优之间的计算量相差很大,那么近似是可以的。是的,它在尖叫D良好的

我有一个问题是这样的:找到了部分解决方案

我想计算将所有来源(黄色)连接到目的地(绿色)所需的最小道路数。但是,我还希望确保从每个源到目标有最小的路径长度。 对角线的移动成本与上/下/左/右相同

贪婪不起作用,它不能保证最小总道路数,还有其他建议吗? 图中显示了从每个源到目标的可能最小路径,重叠显示为较大的圆圈

编辑:贪婪示例失败:


可以有多个目的地吗?你需要最佳的解决方案还是“好”的解决方案?(这是尖叫声吗?)。如果最优和近似最优之间的计算量相差很大,那么近似是可以的。是的,它在尖叫D良好的眼力计划这一点,只有一个目的地。也就是说,如果多个目的地都有一个解决方案,使得每个源都至少需要到达一个目的地,那就更好了。我将以不同的方式看待这个问题。一种简单的方法是执行从目标到一组目标节点的单向最佳优先搜索(Dijkstra或A*)。每次为节点(原始起始节点)找到最短路径时,都会将其从集合中弹出。一旦集合为空,您就找到了到每个节点的最短路径(这里我们假设从每个节点n->n'的路径的成本与从n'到n'的路径的成本相同)。这不是一种昂贵的方法来生成生成生成所有路径的节点的广度优先搜索结果吗?它似乎会给你一个到每个来源的最小路径(在我上面的图片中给出了,红色只是沿着可能的最小路径),我看不出它将如何实现总的最小道路数,但电路板的大小限制是什么?您有内存/时间限制吗?深度优先搜索的一种变体可能会起作用,但它需要大量内存