【发布时间】:2014-04-14 01:38:22
【问题描述】:
我要解决的问题是:
给定一个图,其中每条边都用红色或蓝色着色:
a) 给出一个算法,该算法产生两个顶点 (s,t) 之间的路径,该路径经过最少数量的红边。
b) 给出一个算法,该算法生成两个顶点 (s,t) 之间经过最少蓝色边的路径,在从 s 到 t 且经过最少红色边的所有路径中边缘。
到目前为止: a) 我可以使用修改后的 BFS 算法。查看一个顶点v时,将所有通过蓝色边连接到v的顶点先放入队列中,然后将其余的添加到队列的末尾。因此,算法第一次遇到 t 将是有问题的路径。
如何证明这个算法的正确性?看起来很贪心。如何将其扩展为答案 b)?
感谢您的宝贵时间。
【问题讨论】:
-
当 s 外的“蓝色”路径在该节点和 t 之间有两条红色路径时会发生什么,如果 s 外的第一个“红色”路径只有节点的“蓝色”路径可以到达吨? (您的策略的反例)
-
你考虑过加权图表吗?在 A 的情况下,您可以将权重 0 分配给蓝色边缘,将权重 1 分配给红色边缘,然后找到成本最低的路径。然后对于 B,只需反转权重。
-
@Joel:您对 b) 的建议不起作用,因为我们仍然主要希望尽量减少红色边缘。蓝边仅用作决胜局
-
@ErstwhileIII:OPs 算法仍然会找到正确的路径。您可以在纸上验证这一点
-
@NiklasB。啊,你说得对,我看错了 B 的问题。
标签: algorithm graph-algorithm breadth-first-search