有人对图形算法的Java库有很好的经验吗?我试过JGraph,发现它还行,谷歌中有很多不同的。有哪些是人们在实际生产代码中成功使用或推荐的?

澄清一下,我不是在寻找一个生成图形/图表的库,我在寻找一个有助于图算法的库,例如最小生成树,Kruskal的算法节点,边等。理想情况下,它在一个漂亮的Java OO API中具有一些良好的算法/数据结构。


当前回答

java中的教学图算法实现可以在这里找到(由教授Sedgewick等人): http://algs4.cs.princeton.edu/code/

我是在coursera上参加这些优秀的算法课程时被介绍给他们的(也由Sedgewick教授教授):

https://www.coursera.org/course/algs4partI

https://www.coursera.org/course/algs4partII

其他回答

图片来源:http://mmengineer.blogspot.com/2009/10/java-graph-floyd-class.html

提供了一个强大的软件来处理图形(直接或非直接)。还生成了Graphivz代码,可以看到图形表示。您可以将自己的代码算法放入包中,例如:回溯代码。该软件包提供了一些算法:Dijkstra,回溯最小路径代价等。

在可视化方面,我们小组取得了一些成功。我们扩展了它来处理建筑地板和气泡图,它没有太多抱怨。他们也推出了一个新的Flex工具包,叫做Flare,它使用了非常相似的API。

更新: 我不得不同意这个评论,我们最终写了很多自定义功能/围绕prefuse限制工作。我不能说从头开始会更好,因为我们能够从第一天开始使用prefuse来演示进度。另一方面,如果我们正在做相同东西的第二个实现,我可能会跳过prefuse,因为我们会更好地理解需求。

JGraphT是一个非常简单而强大的Java图形库,它做得非常好,为了消除任何困惑,它与JGraph不同。一些示例代码:

UndirectedGraph<String, DefaultEdge> g =
        new SimpleGraph<String, DefaultEdge>(DefaultEdge.class);

    String v1 = "v1";
    String v2 = "v2";
    String v3 = "v3";
    String v4 = "v4";

    // add the vertices
    g.addVertex(v1);
    g.addVertex(v2);
    g.addVertex(v3);
    g.addVertex(v4);

    // add edges to create a circuit
    g.addEdge(v1, v2);
    g.addEdge(v2, v3);
    g.addEdge(v3, v4);
    g.addEdge(v4, v1);

http://neo4j.org/是一个包含许多图算法的图数据库,并且比大多数内存库具有更好的伸缩性。

http://incubator.apache.org/hama/是Hadoop上用于大量矩阵和图形数据的分布式科学软件包。