我正在尝试解决以下问题:
在我们的银河系中有 N 颗行星。您可以在不同的行星之间旅行,但并非每个行星都通过安全路线与另一个行星相连。每条路线都有给定的光年长度。你的任务是在一组给定的行星 T(其中 0
输入由 N(行星数量)、R(行星之间安全路线数量)、R 路线组成,形式为三元组 ABL,其中 A 和 B 表示行星的恒星 ID,L 表示它们之间的距离年,T(需要建立基地的行星数量),后面是T数字,代表需要建立基地的行星的ID。
您总是从 ID 为 0 的行星开始。在行星 0 上建立基地可能需要也可能不需要。
我尝试解决这个练习并设法得到一个可行的解决方案,但它太慢了。我使用 Floyd Warshall 算法来获得图中任意两个节点(行星)之间的最小路径。接下来,我找到需要以 0 为基数的最近行星,并计算该路径。然后,我将此行星添加到“访问过的行星”列表中,并将其从“目标”行星列表中删除。我重复这个过程直到最后,但现在我试图找到从目标行星到我访问过的任何行星的最近的行星(因为在它们之间旅行是免费的,我不在乎我最后一次去了哪里)。然后,我添加距离,将其从目标中移除,将其添加到已访问并继续前进,直到建立所有必要的基础。
这提供了正确的输出,但它太慢了。
有什么改进的想法吗?可能是 Dijkstra 算法的一些修改版本?