如何在Java中实现二分图?

Hri*_*sto 8 java graph bipartite data-structures

UPDATE

到目前为止,一些答案建议使用邻接列表.在Java中,邻接列表如何?...没有指针正确:)


我正在尝试用Java实现一个Bipartite Graph,从文件中分成两组信息.我找到了这个例子,它实际上完成了这项工作:

http://users.skynet.be/alperthereal/source_files/html/java/Bipartite.java.html

但是,我想实现我自己的版本......如果你看一下我以前的帖子,你就会明白我为什么要这样做.

所以我必须读取一个文件,我可以从中轻松获得顶点数,但边数不是那么容易.一个示例行是"PersonA PersonB",可以读作"PersonA说PersonB".所以阅读这些内容......

"A says B"
"C says B"
"D says B"
"B says D"
"E says A & C"
Run Code Online (Sandbox Code Playgroud)

...产生这种分组:

{A,D,C} and {B,E}.
Run Code Online (Sandbox Code Playgroud)

我将如何实施这个二分图?什么是这项任务的好资源?在创建BipartiteGraph类时,我应该考虑和思考什么(算法)......也许是遍历/排序算法?

JSc*_*her 5

使用邻接列表实现它应该非常简单.如果它是一个无向二分图,我可能会建议使用一个关联矩阵.

因此,对于每个节点,您将拥有一个链接列表数组,或者某种动态分配列表的数组.它应该使添加边缘相当自然,例如在你的例子中你有一个边缘:

人A->人B.

然后你去对应于Person A的数组索引并推回对应于Persona B的索引:

[人A] =人B.

那么也许你会有另一个优势

角色A->人C.

然后你的索引看起来像:

[女神异闻录A] = B人,C人

作为最后一个示例,这将是示例图的邻接列表:

[A] B.

[B] D.

[C] B.

[D B

[E] A,C

每个索引都有一个可从该节点到达的节点列表.

"在创建BipartiteGraph类时,我应该考虑和思考什么(算法)......也许是遍历/排序算法?"

这真的取决于你想用图表做什么......

供参考:类似问题与Sun论坛上的代码

邻接表对的一引导的加权-图表