我在一个编码站点遇到了这个问题,我不知道如何解决。该社论不可用,我也无法在线找到任何相关文章。所以我在这里问这个。
您有一个包含N个顶点和M个边的图形G。顶点的编号从1到N。每个节点的颜色也为黑色或白色。您要计算从1到N的最短路径,以使黑白节点的差最大为1。
很明显,直接应用Dijkstra的算法将不起作用。任何帮助表示赞赏。谢谢!
答案 0 :(得分:0)
我们可以考虑修改后的图并在该图上运行Dijkstra:
对于原始图形中的每个节点,修改后的图形将具有多个元顶点(理论上,无限多个),每个元顶点对应于不同的黑白差异。使用Dijkstra探索图形时,只需创建节点。因此,您将不需要无限多个节点。
然后边缘非常简单(您也可以在探索时创建它们)。如果您当前位于具有黑白差异d
的节点上,并且原始图具有白色节点的边缘,那么您将创建具有黑白差异d-1
的各个节点的边缘。如果原始图具有黑色节点的边缘,则可以在修改后的图中以黑白差异d+1
到相应节点创建一条边缘。您不一定需要将它们视为不同的节点。您还可以将Dijkstra变量存储在按黑白差异分组的节点中。
以这种方式运行Dijkstra将为您提供最短路径,以任何黑白差异显示任何节点。一旦达到可接受的黑白差异的目标节点,就完成了。