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