具有非负权重的定向图(邻接矩阵)

时间:2015-09-21 07:19:20

标签: java graph dijkstra directed-graph breadth-first-search

Graph

Adjacency Matrix

首先,我为我糟糕的绘图画表示道歉。权重显然没有缩放。我很难想出解决一些问题的算法。

首先,我想找到所有需要3"停止"或者更少从C到C(只是一个例子......可以是任何两个顶点)。经过研究,我发现BFS可能是我正在寻找的解决这个问题的方法。我在这个假设中是否正确?

有两条路径有3站或更少:

C - > D - > ç

C - > E - > B - > ç

我还想找到从A到C的最短路径(只是一个例子..可以是任意两个顶点)。经过一些研究后,我得出结论,我应该使用Dijkstra的算法。我在这个假设中是否正确?如果是这样,我看到有各种各样的实现。如果我使用二进制堆,fibonacci堆或队列吗?

谢谢,如果您需要更多信息,请告诉我们!

1 个答案:

答案 0 :(得分:0)

  

首先,我想找到所有需要3"停止"从C到   C(只是一个例子......可以是任意两个顶点)。经过研究,我   发现BFS可能是我正在寻找的解决这个问题的方法。上午   我在这个假设中纠正了吗?

是的,你是。 BFS的属性是以级别顺序处理节点,因此您首先处理作为源节点的邻居的所有节点,然后处理作为源节点的邻居的邻居的节点等。

  

我也想找到从A到C的最短路径(只是一个例子..   可以是任意两个顶点)。做了一点研究后,我来了   得出结论我应该使用Dijkstra的算法。我对么   在这个假设?如果是这样,我看到有各种各样的   实现。如果我使用二进制堆,fibonacci堆,   或队列?

再次,是的,Dijkstra的算法是解决此类问题的经典解决方案。还有其他算法更适合某些特殊情况(例如Bellman-Ford,如果你的图表中有负权重),但在大多数情况下(你的也是如此),请使用Dijkstra。关于实现,理论上最好的实现基于Fibonacci堆实现的最小优先级队列。此实现的运行时间为O(|E|+|V|/log|V|)(其中|V|是顶点数,|E|是边数)。但是,在实践中,二进制堆通常优于斐波那契堆,有关详细信息,请参阅this interesting thread