0

我处于需要在图形结构中对一组 JavaBean 建模的位置,其中每个 bean 都是图形上的一个节点/顶点,并且它们通过和边“连接”/相互关联。

因此,就像使用List<?>orArrayList<?>来表示一系列项目一样,我需要一个(最好是通用的)API 来表示图中的节点。此 API 需要允许我构建图表、从图表中添加/删除我喜欢的节点等。

此外,我需要能够通过向其传递任意数据值来搜索整个图,并且它将返回包含该数据的节点/顶点。

我唯一能找到的是内置的 Java TreeSet,但我不需要从单个根节点流出的有向树。我需要一个真正的(在数学意义上)图形 API。

是否存在这样的解决方案,或者我是否坚持从头开始编写自己的解决方案(uggghhh)。提前致谢!

4

1 回答 1

0

如果我理解得很好,您需要一个“节点”对象的表示:

1)允许您存储值,以便您以后可以搜索正确的节点

2)使用预定义的数据结构来保存图形的信息。

3) 允许被搜索算法使用。

有一个简单的解决方案可以满足所有三个要求:

public class Node {

    // Add as many fields as you need to contain the node info
    private String mName;
    private int mArbitraryValue;

    // Store the adjacent nodes in a list
    private List<Node> mAdjacencyList;

    //Define your constructors
    public Node(String name, int arbitraryValue, List<Node> adjacencyList) {
        mName = name;
        mArbitraryValue = arbitraryValue;
        mAdjacencyList = adjacencyList;
    }

    /* Add your methods here depending on the functionality that
       you want to implement
    */

    public String getName() {
        return mName;
    }

    public int getArbitraryValue() {
        return mArbitraryValue;
    }

    public List<Node> getNeighbors() {
        return Collections.unmodifiableList(mAdjacencyList);
    }

    // Add setters if you want these values to be able to change

    public boolean addNeighbor(Node n) {
        return !mAdjacencyList.contains((Node) n) && mAdjacencyList.add(n);
    }

    public boolean removeNeighbor(Node n) {
        return mAdjacencyList.remove((Node) n);
    }
}

如果您的对象可以更改,我不建议您使用 HashMap 实现邻接列表,因为它可能导致集合中断(即,即使对象存在,对 contains() 的调用也可能返回 false)。

现在,您的搜索算法可以访问节点的成员变量以检查它们是否已完成。

于 2016-04-22T23:59:43.937 回答