Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
查找两个节点之间的隐藏节点-graph-java_Java_Algorithm_Dijkstra_Graphstream - Fatal编程技术网

查找两个节点之间的隐藏节点-graph-java

查找两个节点之间的隐藏节点-graph-java,java,algorithm,dijkstra,graphstream,Java,Algorithm,Dijkstra,Graphstream,我的英语不是很好,但我会尽力在这里解释我的问题。 我正在开发一个应用程序,我必须在其中创建图形。目前我正在使用GraphStream 对我的图表的要求非常复杂,即: 我有一个名为CDR(calldatarecord)的表,其中有两列ANUMBER和BNUMBER。表的结构非常清楚,它显示一个成员调用了Bnumber,还有一列是DATETIME,它显示了调用的日期和时间。但我这里只需要两列 假设我们这里有4个数字:123456789000,表结构如下 Anumber Bnumber ----

我的英语不是很好,但我会尽力在这里解释我的问题。 我正在开发一个应用程序,我必须在其中创建图形。目前我正在使用
GraphStream

对我的图表的要求非常复杂,即:

我有一个名为CDR(calldatarecord)的表,其中有两列ANUMBER和BNUMBER。表的结构非常清楚,它显示一个成员调用了Bnumber,还有一列是DATETIME,它显示了调用的日期和时间。但我这里只需要两列

假设我们这里有4个数字:123456789000,表结构如下

Anumber    Bnumber
-------    -------
123        456
123        789
456        789
789        000
456        000
我这里的表格清楚地显示123没有呼叫000,但123呼叫456和789,这两个号码呼叫000,所以我必须显示123和000之间的有向图,可能显示如下
123->456->000
132->789->000

所以问题是我不知道如何在123和000之间找到这条路径。可能有2个以上的数字,比如5或6个数字,我必须在所有给定的5或6个数字之间找到隐藏的数字,因为在上述场景中456和789是132和000之间的隐藏数字

还有一件事,我的表包含超过2000万行,很明显,在未来,当用户互相调用时,行的数量将快速增长

到目前为止我所做的:

我在这个问题上做了一些研发,但没有找到任何好的库或解决方案。到目前为止,我认为Dijkstra的算法最适合我的场景,因为
GraphStream
幸运地提供了这个算法

我想从你们这里得到什么,给我一个想法,这个算法会给我所需的结果,或者我必须找到任何其他算法或图形库,这将最适合我的问题。我不擅长ALGO,这就是为什么我在这里寻求任何帮助或指导,如果你们能给我的话。
谢谢

你根本不需要Dijkstra的算法,因为你在边缘上没有成本。你需要简单的算法。 这里很简单,但您应该添加“标签”数组来标记访问的节点。所以在BFS之后,您可以恢复从每个节点到源节点的传递(在您的例子中是123),或者说无法从给定节点到达该节点(如果该节点的标签保持为0)。 应按以下方式添加标签:

开始时所有标签均等于0

访问新节点时,将其标签设置为当前节点标签+1


但若你们把每一个边缘的成本设为1,Dijkstra's可以帮助你们。这不是解决问题的有效方法。

在您链接的网页中,它说有几种方法可以迭代最短路径。(GetPathEdge(节点)、getPathEdgesIterator(节点)、getPathNodes(节点)和getPathNodesIterator(节点))。我相信GetPathEdge(节点)和getPathNodes(节点)为您提供了所需的信息。如果他们做了工作,试着使用他们并发表评论。当然。我会尝试一下,如果它符合我的需要,我会在这里发布我的解决方案。不过,我建议你自己理解并实现Dijkstra的算法。这并不难理解,这样你就可以修改它,做任何你想做的事情。是的,我会尽我最大的努力自己去做。我只需要确认Dijkstra的算法,它会给我所需的结果