繁体   English   中英

查找两个节点之间的隐藏节点-图形-Java

[英]Find the hidden nodes between two nodes - graph - java

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

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

我有一个名为CDR(呼叫数据记录)的表 ,其中有2列ANUMBER和BNUMBER 该表的结构非常清楚,它显示了Anumber称为Bnumber,还有DATETIME的另一列,它显示了调用的日期和时间。 但是我在这里只需要两列。

可以说这里有4个数字:123、456、789、000,表结构是这样的

Anumber    Bnumber
-------    -------
123        456
123        789
456        789
789        000
456        000

我的表格清楚地显示了123并没有调用000,但是123分别调用了456和789,而这两个数字分别称为000,因此我必须显示123和000之间的有向图,它可能显示为123->456->000132->789->000

所以问题是我不知道如何找到123和000之间的路径。可能有2个以上的数字(例如5或6个数字),我必须在所有给定的5或6个数字AS之间找到隐藏的数字。场景456和789上方的数字是132和000之间的隐藏数字。

而且我的表还包含超过2000万行,而且将来显然,随着用户彼此调用,行数将非常快地增长。

我做了这么远的事情:

我已经在此问题上进行了一些研发,但是找不到任何好的库或解决方案。 到目前为止,我觉得Dijkstra's Algorithm是最适合我的方案为GraphStream幸运的是,提供了这种算法在这里

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

您根本不需要Dijkstra的算法,因为您没有边缘成本。 您需要简单的BFS算法。 这是简单的实现,但是您应该添加“ labels”数组来标记访问的节点。 因此,在BFS之后,您可以将每个节点的传递恢复到源节点(在您的情况下为123),或者说无法从给定节点访问该节点(如果该节点的标签保持为0)。 您应通过以下方式添加标签:

开始时所有标签等于0

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

但是,如果将每个边的成本设置为1,Dijkstra可以为您提供帮助。这并不是解决问题的有效方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM