1

我使用 jgrapht 库创建了一个有向图,我的顶点是我使用此代码创建的 Point 对象:

public static class Point {

  public int x;
  public int y;

  public  Point(int x, int y) 
  {

    this.x = x;
    this.y = y;
  }
  @Override
    public String toString() {
    return ("[x="+x+" y="+y+"]");
  }

  @Override
    public int hashCode() {
    int hash = 7;
    hash = 71 * hash + this.x;
    hash = 71 * hash + this.y;
    return hash;
  }



  @Override
    public boolean equals(Object other) 
  {
    if (this == other)
      return true;

    if (!(other instanceof Point))
      return false;

    Point otherPoint = (Point) other;
    return otherPoint.x == x && otherPoint.y == y;
  }
}

我可以使用 successorListOf() 检索顶点的后继者,使用前任列表Of() 检索其前身。

我想在顶点的前任与其后继者之间添加边(在我的情况下,总是只有一个前任,但有许多后继者)。所以我想做类似的事情:

directedGraph.addEdge(Graphs.predecessorListOf(directedGraph,myPoint),Graphs.successorListOf(directedGraph,myPoint));

但是这些方法不接受顶点列表作为参数,一次只接受一个顶点。虽然我应该做的是为每个后继者和前任者自动创建一个 Point 对象,但这似乎不合适,因为这些元素已经是顶​​点,所以它们也是 Point 对象。

我怎样才能做到这一点 ?我不知道如何根据继任者或前任列表创建对象。这是处理这个问题的正确方法吗?

4

1 回答 1

2

我不知道 jgrapht 库,但你不能简单地遍历前任和后继点列表:

for (Point predecessor : Graphs.predecessorListOf(directedGraph, myPoint)) {
    for (Point successor : Graphs.successorListOf(directedGraph, myPoint)) {
        directedGraph.addEdge(predecessor, successor);
    }
}
于 2015-08-03T23:01:43.927 回答