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

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


当前回答

Apache Commons提供了Commons -graph。在http://svn.apache.org/viewvc/commons/sandbox/graph/trunk/下可以查看源代码。SVN中也有API使用示例。参见https://issues.apache.org/jira/browse/SANDBOX-458获得实现的算法列表,并与Jung, GraphT, Prefuse, jBPT进行比较

谷歌番石榴如果你只需要好的数据结构。

JGraphT是一个实现了许多算法的图库,并且(在我看来)有一个很好的图模型。Helloworld例子。许可:LGPL + EPL。

JUNG2 is also a BSD-licensed library with the data structure similar to JGraphT. It offers layouting algorithms, which are currently missing in JGraphT. The most recent commit is from 2010 and packages hep.aida.* are LGPL (via the colt library, which is imported by JUNG). This prevents JUNG from being used in projects under the umbrella of ASF and ESF. Maybe one should use the github fork and remove that dependency. Commit f4ca0cd is mirroring the last CVS commit. The current commits seem to remove visualization functionality. Commit d0fb491c adds a .gitignore.

Prefuse使用矩阵结构存储图,这对于稀疏图来说内存效率不高。许可:BSD

Eclipse Zest内置了图形布局算法,可以独立于SWT使用。看到org.eclipse.zest.layouts.algorithms。所使用的图结构是Eclipse Draw2d中的一个,其中节点是显式对象,而不是通过泛型注入的(这发生在Apache Commons graph、JGraphT和JUNG2中)。

其他回答

如果你喜欢图形算法,JDSL (Java中的数据结构库)应该足够好了——http://www.cs.brown.edu/cgc/jdsl/

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);

简介:

JGraphT if you are more interested in data structures and algorithms. JGraph if your primary focus is visualization. Jung, yWorks, and BFG are other things people tried using. Prefuse is a no no since one has to rewrite most of it. Google Guava if you need good datastructures only. Apache Commons Graph. Currently dormant, but provides implementations for many algorithms. See https://issues.apache.org/jira/browse/SANDBOX-458 for a list of implemented algorithms, also compared with Jung, GraphT, Prefuse, jBPT

在一个大学项目中,我摆弄了yWorks的yFiles,发现它有很好的API。

相信一个图可以简单地表示为:

class Node {
   int value;
   List<Node> adj;
}

实现大部分你自己感兴趣的算法。如果您在一些关于图形的练习/学习过程中遇到了这个问题,那么这是最好的库。,)

对于大多数常见算法,你也可以选择邻接矩阵:

class SparseGraph {
  int[] nodeValues;
  List<Integer>[] edges;     
}

或者一些运算的矩阵:

class DenseGraph {
  int[] nodeValues;
  int[][] edges;     
}