【问题标题】:Can a graph find the shortest route from one vertex to another in two directions?图能否找到从一个顶点到另一个顶点在两个方向上的最短路径?
【发布时间】:2019-06-11 01:50:13
【问题描述】:

我正在尝试创建一个图表并用城市填充它,它们之间的距离,然后找到从一个城市到另一个城市的最快路线。我是图表新手,我决定在网上搜索类似的算法。我发现的一个给我带来了这个问题。我发现的算法使用 Dijkstra 算法来找到从一个顶点到另一个顶点的最短路径。但是,它仅适用于某些情况。我发现这个算法可以跟踪顶点的 IN 和 OUT。这意味着如果存在从 A 到 B 和从 B 到 C 的路径,则算法能够找到从 A 到 C 的路径,但是它无法找到从 C 到 A 的路径(或从 C 到 B 的路径)事情)。我添加了一些代码来改变算法,当一条边从一个顶点添加到另一个顶点时,它也会从另一个顶点添加一条边到我们添加边的那个顶点。然而,这使得该算法不适用于任何情况。我的部分代码进一步解释:

graph.add("a", "b", 32);
graph.add("a", "c", 15);
graph.add("a", "d", 17)
graph.add("b", "c", 17);
graph.add("c", "d", 10); 
graph.add("c", "e", 21);
graph.add("d", "e", 22);
graph.add("b", "f", 11);
graph.add("a", "f", 123);
graph.add("e", "f", 8);
graph.add("d","f", 5);
graph.add("c", "g", 19);
graph.add("e", "g", 4);
graph.add("b", "g", 12);

每个顶点的 IN 和 OUT(更改前):

Vertex: a :  In: Out: b c d f 
Vertex: b :  In: a Out: c f g 
Vertex: c :  In: a b Out: d e g 
Vertex: d :  In: a c Out: e f 
Vertex: e :  In: c d Out: f g 
Vertex: f :  In: b a e d Out: 
Vertex: g :  In: c e b Out: 

原始算法将成功找到从一个到另一个的案例顶点的最短路径。示例:

a to e
a : cost : 0
c : cost : 15
e : cost : 36

但是,如果我们试图从一个不指向该顶点的顶点找到一条路径,该路径不指向一个已经指向它的顶点,那么它将失败,这使得从后来添加的顶点到开始添加的顶点的路径变得不可能。

e to a
No path found

每个顶点的输入和输出(更改后):

Vertex: a :  In: b c d f Out: b c d f 
Vertex: b :  In: a c f g Out: a c f g 
Vertex: c :  In: a b d e g Out: a b d e g 
Vertex: d :  In: a c e f Out: a c e f 
Vertex: e :  In: c d f g Out: c d f g 
Vertex: f :  In: b a e d Out: b a e d 
Vertex: g :  In: c e b Out: c e b 

我相信如果我能够让顶点指向指向它们的顶点,那么算法就会起作用,但是现在每次尝试都会给我留下一个空指针异常。

这让我想到了以下问题:

每个顶点指向其所有相邻顶点的图是否有相同的顶点指向它实际上是一个事物并且它们有一个特定的名称?用于说明的图片。

Dijkstra 算法不是用于这种特殊情况的正确算法吗?

我发现并使用的前面提到的算法在这里,感谢 snarkbait:https://gist.github.com/snarkbait/9ff6fffe423b220c8890

【问题讨论】:

    标签: graph


    【解决方案1】:

    您可以将这样的图视为对称有向图或简单地视为无向图(请参阅wikipedia)。而且 Dijkstra 的算法总体上必须很好地处理这种情况。

    【讨论】:

      猜你喜欢
      • 2019-08-09
      • 2021-05-25
      • 1970-01-01
      • 1970-01-01
      • 2014-01-11
      • 2019-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多