答案 0 :(得分:1)
复杂度:与BFS相同
答案 1 :(得分:1)
从END开始执行BFS-每当它到达禁止节点时,更新其distance_from_end且不将其邻居添加到您的队列中。所有未访问的禁止节点均不应具有有效的distance_from_end。
与(1)相同,但从START开始并更新distance_from_start
对于所有禁止的节点,请选择距离最小的距离,从距离起始的距离到距离结束的距离。 (请注意,此节点可能不存在,因为节点在这些字段中可以具有无效值,因此应取消考虑)
从头到尾进行一次BFS,排除所有禁止的节点(在(3)中找到的除外)。
在4次执行的BFS中,您将:
答案 2 :(得分:0)
您可以执行第一个BFS,该BFS从一开始就列出可访问的“禁止的”节点(但不能越过它)。 然后记录从开始的距离。在您的示例2中,每个禁止的节点。
您要从末端节点进行同样的操作,在路径上给出距离2和1。
然后取消禁止最佳禁止节点(到起点的最小距离+到终点的距离)。最后,您将在整个图中执行BFS。
您最终可以将路径保存到所有禁止的节点,以保存最后的BFS。
答案 3 :(得分:0)
执行BFS,但将图形作为参数而不是全局参考表。在任何分支上,当您访问禁止节点时,都将停止并从传递到下一级别的图中移除所有其他禁止节点。
实际上,如果您将禁止节点列表作为图结构的一部分,则删除操作可能是一次简单的迭代。