Algorithm 通过某些已定义节点的最短路径
在一个有向图中,找到从s到t的最短路径,使路径通过V的某个子集,我们称之为死亡节点。该算法给定一个数字n,当从s到t遍历时,路径不能通过n个以上的死亡节点。她说,找到最短路径的最好方法是什么?我正在偷Dijkstra的,但是如何确保我们通过的节点不超过n个?请帮我调整Dijkstra's以包含此条件。Small n 如果n很小,您可以制作n个图形副本,将它们称为级别1到n 你从1级的s开始。如果位于法线节点,则边会将您带到同一标高内的节点。如果处于死亡节点,则边将带您到下一级别内的节点。如果您位于标高n上的死亡节点,则只需忽略边 还将所有级别的t节点连接到新的单一目的地t(重量为零) 然后计算从s到T的最短路径 这种方法的问题是图的大小增加了n倍,因此它只适用于小的n 大的 另一种方法是将离开死亡节点的每条边的权重增加一个变量x 随着变量x的增加,最短路径将使用越来越少的死亡节点。调整x的值(例如,使用二分法),直到图形仅使用n个死亡节点Algorithm 通过某些已定义节点的最短路径,algorithm,dijkstra,Algorithm,Dijkstra,在一个有向图中,找到从s到t的最短路径,使路径通过V的某个子集,我们称之为死亡节点。该算法给定一个数字n,当从s到t遍历时,路径不能通过n个以上的死亡节点。她说,找到最短路径的最好方法是什么?我正在偷Dijkstra的,但是如何确保我们通过的节点不超过n个?请帮我调整Dijkstra's以包含此条件。Small n 如果n很小,您可以制作n个图形副本,将它们称为级别1到n 你从1级的s开始。如果位于法线节点,则边会将您带到同一标高内的节点。如果处于死亡节点,则边将带您到下一级别内的节点。如果您位
这应该需要对最短路径进行O(logn)左右的评估。我会将途中遇到的死节点数作为新的(稀疏)维度添加到计算距离中——基本上每个节点最多有n个最佳距离 实现您自己的BFS将是类似的:对于每个节点,您需要将“使用x个死节点查看”与“使用y个死节点查看”区别对待,除非途中的总距离和死节点数都较小 p.s.:如果您被这一方法所困扰,请发布到目前为止的代码O:)