修改Dijkstra以查找具有最大颜色节点的路径

时间:2017-03-31 14:30:52

标签: graph-algorithm dijkstra

我刚看到一个问题的解决方案,修改Dijkstra以获得最大K色边缘的最短路径。我想知道如果我们想找到带有彩色节点而不是边缘的最短路径,我们如何修改Dijkstra才能做到这一点?

我想到的是,在Dijkstra之上,我添加一个整数变量,比方说我。然后创建一个映射来记录到达那里需要多少个彩色节点,如果有一种方法通过颜色较少的节点,则更新它。我们将采用最少彩色节点的路径。但这似乎有些不对劲,有什么建议吗?

 Algorithm  Dijkstra ( G , s in V(G), c(v) in{black, white}, K ) 
 1.  for  each vertex u in V(G)  do  dist[u] <- +infinity
 2.  dist[s] <- 0 ;   p[s] <- null 
 3. c(s)=black? r <- 1 : r <- 0
 4. Q <- ConstructMinHeap(V(G), dist) 
 5. M <- Map(s, r)               
 6.  while Q != null do 
 7.     u <- DeleteMin(Q)                           
 8.     for  each v in Adj[u]  do   
 9.         if M.value(u) is null then do
 10.                M <- Map(u, M.value(v) + c(u)=black? 1 : 0)
 11.            else
 12.                M.value(u) < (M.value(v) + c(u)=black? 1 : 0)? Update : do nothing
 13.            end-if
 14.             if   dist[v] >  dist[u] + w(u,v) and M.value < K then do 
 15.                dist[v] <- dist[u] + w(u,v)             
 16.                p[v] <- u                               
 17.                UpHeap(v,Q)             
 18.            end-if
 19.        end-for
 20.     end-while                          
 end 

1 个答案:

答案 0 :(得分:0)

如果使用优先级队列对选项进行排名,请考虑使用到目前为止的距离和通过的彩色节点数来确定优先级顺序。通过这种方式,您可以使用传统的Dijkstra,并根据您的优先级排名来确定最小路径。