我使用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()及其前身使用predecessorListOf()来检索顶点的后继。
我想在顶点的前身及其后继者之间添加边缘(在我的例子中,总是只有一个前身但很多后继者)。所以我想做一些像:
directedGraph.addEdge(Graphs.predecessorListOf(directedGraph,myPoint),Graphs.successorListOf(directedGraph,myPoint));
但是这些方法并不将顶点列表作为参数,一次只能作为一个顶点。 我应该做的是为每个后继者和前任者自动创建一个Point对象,但它似乎不合适,因为这些元素已经是顶点,所以它们也是Point对象。
我该怎么做?我不知道如何根据后继者或前任列表创建对象。这是处理这个问题的正确方法吗?
答案 0 :(得分:2)
我不知道jgrapht库,但你不能简单地遍历前任和后继点列表:
for (Point predecessor : Graphs.predecessorListOf(directedGraph, myPoint)) {
for (Point successor : Graphs.successorListOf(directedGraph, myPoint)) {
directedGraph.addEdge(predecessor, successor);
}
}