【问题标题】:Modification for Dijkstra Algorithm [closed]Dijkstra 算法的修改[关闭]
【发布时间】:2017-06-01 07:08:01
【问题描述】:

我想知道,当给定起始顶点s时,只有当一个顶点距离起始顶点不超过三个边时,才会计算最短路径。

我想通过计算父母的数量来做到这一点,如果 number_of_parents

请有人使用该算法为我澄清这一点吗?

以下是标准的 Dijkstra 算法。

Dijkstra(G,W,s)
   Initialize_Single_Source(G,s)
   S= {}
   Q = V[G]
   while Q != {} do
      u = extract_min(Q)
      S = S U {u}
      for each vertex v element of Adj[u] do
                 relax(u,v,w)

【问题讨论】:

  • "我想过这样做" 继续这样做,然后问一个问题。
  • 为什么不创建一个新图,它只包含距离源最多 3 条边的所有节点,并在该图上使用 dijkstra 算法。您可以通过执行 3 次 BFS 迭代来创建较小的图,所有访问过的节点都属于您的较小图。

标签: algorithm shortest-path dijkstra


【解决方案1】:

我们使用数组 L 代替顶点来确定级别,即节点与源的距离

Dijkstra(G,W, s)
   Initialize_Single_Source(G,s)
   S= {}
   Q = V[G]
   L = {an array to determine levels of each node, 
    initially all nodes have level "infinite" except for s who has level 0}
   while Q != {} do
      u = extract_min(Q)
      u_level = L[u]
      if(u_level > 3){
        ignore u and don't add it to S;
        continue;
      }
      S = S U {u}
      for each vertex v element of Adj[u] do
                 relax(u,v,w)
                 in relax function you put L[v] = min(L[v], u_level + 1);

【讨论】:

  • 我认为这是正确的方法..谢谢
  • 我们不是为懒惰的家庭工作者提供的编码服务。这个答案对任何人都没有帮助,至少是OP,因为他不会学到任何东西。
  • 我希望你能在几年内得到这样的同事,这样你就可以学到@Olaf 试图教授的课程。
猜你喜欢
  • 1970-01-01
  • 2017-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多