这是我在在线法官网站上发现的问题:
我有一个无向图(带循环)。我们在图中有 k 个不同类别的顶点。您可以将第 1 类顶点着色为绿色,将第 2 类顶点着色为红色,依此类推。还有一类特殊的白色顶点(稍后会详细介绍)。
现在,用户将指定一个源顶点、一个目标顶点和一系列不同的顶点类(非白色),例如。
我们得到源顶点 10、目标顶点 40 和一个序列:红色->蓝色->黑色。
我们必须找到最短路径,使得该路径从顶点 10 开始,接触 1 个红色顶点,然后是 1 个蓝色顶点和 1 个黑色顶点,然后到达顶点 40。但是,该路径可以根据需要具有任意数量的白色顶点。它还可以遍历一个白色顶点两次。
所以一个解决方案可以是:10->20(white)->35(red)->21(white)->22(white)->30(blue)->34(black)->40
不正确:
10->20(白色)->30(蓝色)->21(白色)->22(白色)->35(红色)->34(黑色)->40(先变成蓝色再变成红色)
10->20(白)->35(红)->56(红)->21(白)->22(白)->30(蓝)->34(黑)->40(穿过红两次)