给定两个相连的加权图和一组可以在两个图之间“过河”的顶点对,任务是找到一个由这些交叉连接而成的图的最小生成树(MST),其中包含恰好N个过河的交叉点。对于给定的排列,总是存在解决方案。
在下面的示例中,左侧图有顶点(0, 1, 2, 3),右侧图有顶点(4, 5, 6, 7, 8)。边3-4、3-5、2-4、2-5可供选择,且N = 2。以红色表示的最小生成树恰好包含两个过河的交叉点。 首先,通过最小生成树的切割属性,我认为要选择的交叉点是其中最低的 N 个。
其次,如何强制让 Prim 算法在寻找最小生成树时选择某些边呢?你不能预先连接已选的交叉点,因为它可能只会选择一个。
我的第一个想法是修改算法,使其在过程中始终选择已选的交叉点(如上图中的3-5和2-4),但这可能会创建循环,对吧?它必须知道在强制选择某些顶点时不要创建循环。
我的第二个想法是先找到左侧和右侧的最小生成树,然后再尝试连接它们——但这样做可能会创建循环,对吧?如果用最大值的边来打破循环,那是否就可以自动得出答案了呢?因为你可以确保两侧都有它们的最小生成树,它们通过最便宜的路径相连,并且没有循环。
在下面的示例中,左侧图有顶点(0, 1, 2, 3),右侧图有顶点(4, 5, 6, 7, 8)。边3-4、3-5、2-4、2-5可供选择,且N = 2。以红色表示的最小生成树恰好包含两个过河的交叉点。 首先,通过最小生成树的切割属性,我认为要选择的交叉点是其中最低的 N 个。
其次,如何强制让 Prim 算法在寻找最小生成树时选择某些边呢?你不能预先连接已选的交叉点,因为它可能只会选择一个。
我的第一个想法是修改算法,使其在过程中始终选择已选的交叉点(如上图中的3-5和2-4),但这可能会创建循环,对吧?它必须知道在强制选择某些顶点时不要创建循环。
我的第二个想法是先找到左侧和右侧的最小生成树,然后再尝试连接它们——但这样做可能会创建循环,对吧?如果用最大值的边来打破循环,那是否就可以自动得出答案了呢?因为你可以确保两侧都有它们的最小生成树,它们通过最便宜的路径相连,并且没有循环。