Java:如何表示图形?

标签 java graph

我正在实现一些算法来自学图表以及如何使用它们。你会推荐什么是在 Java 中做到这一点的最佳方法?我在想这样的事情:

public class Vertex {

    private ArrayList<Vertex> outnodes; //Adjacency list. if I wanted to support edge weight, this would be a hash map.

    //methods to manipulate outnodes
}

public class Graph {
    private ArrayList<Vertex> nodes;
    //algorithms on graphs
}

但我基本上只是编造了这个。有没有更好的办法?

另外,我希望它能够支持普通图的变体,例如有向图、加权边、多重图等。

最佳答案

每个节点都是唯一命名的,并且知道它连接到谁。连接列表允许一个节点连接到任意数量的其他节点。

public class Node {
    public String name;
    public List<Edge> connections;
}

每个连接都是有向的,有起点和终点,并且是加权的。

public class Edge {
    public Node start;
    public Node end;
    public double weight;
}

图表只是您的节点集合。而不是 List<Node>考虑Map<String, Node>按名称快速查找。

public class Graph {
    List<Node> nodes;
}

关于Java:如何表示图形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1737627/

相关文章:

algorithm - 建议一个算法(图 - 可能是 NP-Complete)

java - 加载打包成jar、包含资源的java插件时出现问题

java - 将签名的小程序集成到 Java Web 应用程序中

java - 如何编写正确的切入点来匹配接口(interface)返回对象?

java - 来自 java 的 KIBANA 弹性查询

javascript - 使用许多节点和链接加速 d3 力布局

java - Netty:如何减少来自服务器的连续消息之间的延迟?

c - 边的链接列表

java - 如何防止在 OrientDB 中的相同顶点之间创建重复边?

javascript - Highcharts 将渐变映射到 y 轴?