图形能否找到从一个顶点到另一个顶点在两个方向上的最短路径?

时间:2019-06-10 17:19:09

标签: graph

我正在尝试创建一个图表,并在其中填充城市,城市之间的距离,然后找到从一个城市到另一个城市的最快路线。我是图形新手,因此决定在线搜索相似的算法。我发现的一个问题带给了我这个问题。我发现的算法使用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);

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

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

two muppets

1 个答案:

答案 0 :(得分:0)

您可以将此类图视为有向图或简单地视为无向图(请参见wikipedia)。而且Dijkstra的算法通常必须很好地处理这种情况。