Algorithm 具有最大特殊节点数的特殊节点图中的简单路径

Algorithm 具有最大特殊节点数的特殊节点图中的简单路径,algorithm,graph,path-finding,np,Algorithm,Graph,Path Finding,Np,我有一个问题: 给定一个图G=(V,E),它有一个称为R的节点子集,这些节点是“特殊”节点。特殊节点的数量可能因情况而异。图可以是有向的、无向的、没有权重的,并且可以包含循环 现在,我需要一个算法,可以找到从节点s到节点t的路径,该路径通过R中最大数量的“特殊”节点 我知道这个问题是np难的,很容易从哈密顿路径中还原出来,但我一直在寻找不同的方法来解决它,而不必对所有路径都施加暴力 第一次尝试 首先,我尝试对图形进行一些预处理,其中每个到“正常”节点的边的权重为2,而到R中节点的边的权重为0。

我有一个问题: 给定一个图G=(V,E),它有一个称为R的节点子集,这些节点是“特殊”节点。特殊节点的数量可能因情况而异。图可以是有向的、无向的、没有权重的,并且可以包含循环

现在,我需要一个算法,可以找到从节点s到节点t的路径,该路径通过R中最大数量的“特殊”节点

我知道这个问题是np难的,很容易从哈密顿路径中还原出来,但我一直在寻找不同的方法来解决它,而不必对所有路径都施加暴力

第一次尝试

首先,我尝试对图形进行一些预处理,其中每个到“正常”节点的边的权重为2,而到R中节点的边的权重为0。 然后我会在图表上运行dijkstra

然而,反例如下:

在这个图中,dijkstra会选择路径[s,4,t],即使路径[s,1,2,3,t]是一条实际的简单路径,具有最大数量的红色节点

第二次尝试

我的第二次尝试有点复杂。在这次尝试中,我将从图中的s节点和每个R节点运行bfs。然后,我将创建一个新的可达性图,该图可以对相互连接的R节点进行建模

这种方法在任何具有循环或没有定向的图中都会遇到重大问题,因为原始图中不存在的R节点之间的连接将包含在新图中


因此,如果有人对我可以采取的任何智能预处理步骤有任何出价,我将非常高兴

您的第一种方法似乎很好,例如:

  • R=1中某个节点v的所有边的权重
  • 其余边缘的重量=0

然后运行Dijkstra,截止点=max special nodes

这样做是否会适得其反?避免使用所有红色节点,因为它们的权重更高。我在问题中添加了一个反例