Graph 图最短路径无限圈

Graph 图最短路径无限圈,graph,dijkstra,shortest-path,Graph,Dijkstra,Shortest Path,所以我的绘画技巧不是最好的,但我认为它很好地展示了这个例子。假设我想计算A和C之间的最短路径,考虑到我发现的所有算法都是贪婪的,它不会被困在A和B之间的无限循环中吗 有什么建议吗 提前感谢不,不应该有无限循环 图中已访问和未访问的节点将保持跟踪,已访问的节点将永远不会再次访问 在您的示例中: 将所有节点标记为未访问,但已访问的起始节点除外 从A开始,访问B,将B标记为已访问 B只能访问A或C,但A已标记为已访问 唯一可用的节点是C,它是未访问的 我通常在每个节点中输入距离和路径(节点列表)。输入

所以我的绘画技巧不是最好的,但我认为它很好地展示了这个例子。假设我想计算A和C之间的最短路径,考虑到我发现的所有算法都是贪婪的,它不会被困在A和B之间的无限循环中吗

有什么建议吗


提前感谢

不,不应该有无限循环

图中已访问和未访问的节点将保持跟踪,已访问的节点将永远不会再次访问

在您的示例中:

  • 将所有节点标记为未访问,但已访问的起始节点除外
  • 从A开始,访问B,将B标记为已访问
  • B只能访问A或C,但A已标记为已访问
  • 唯一可用的节点是C,它是未访问的

  • 我通常在每个节点中输入距离和路径(节点列表)。输入节点时,我会将当前距离与现有距离进行比较。如果当前距离比现有距离短,我将用旧路径替换新路径

    另一种方法是保留每个节点到其他节点的距离列表。离开每个节点时填写此列表

    从A开始:设置已访问的A。到B。然后回到A。A已经访问过,所以在B处,将B到A的距离添加为26。 从B移动到D,然后返回B。B已经访问过,因此在D处,将D到B的距离添加为96。将从D到A的距离相加为96+26=112。
    从D移动到E,然后返回到已经访问过的D,因此在E处,将距离E添加到D为21。将从E到B的距离相加为21+96=117。将距离E添加到as 21+96+26=143。

    如果要获取所有最短路径的列表,请确保将每个节点作为起始节点重复该过程。@rob哦,好的,这很有意义!非常感谢。所以我可以在这里使用Dijkstra,对吗?是的,你可以在这里使用Dijkstra的算法。@rob很抱歉一直打扰你,但是你怎么计算A和F之间的最短路径呢?因为我从E转C时陷入了僵局,因为我不能回到E。。。