我似乎在顶点集中的jgrapht图(在本例中为SimpleDirectedGraph)中如何存储顶点之间存在非直观的差异,以及它们如何存储为边的目标(请参阅下面的我的内容)使用getEdgeTarget)。我以为它们是相同的 - 即它们指向相同的对象(在这种情况下是一个SteveVertex)并且具有相同的哈希码 - 但是它们似乎位于不同的地方,每个症状如下所示。
当下面的代码遇到一个循环时,它遇到原始起始顶点作为边的目标,它不会将此顶点显示为已访问过,即使hashCode(SteveVertex @ vertex1)与vertexSet的第一个条目,它将顶点显示为已访问过。
在诊断时会非常感谢任何帮助。
private static SimpleDirectedGraph<SteveVertex, DefaultEdge> graph;
private static void SteveDepthFirstSearch(SteveVertex startVertex)
{
if (!startVertex.visited()) {
startVertex.visit();
for (DefaultEdge e : graph.outgoingEdgesOf(startVertex))
SteveDepthFirstSearch(graph.getEdgeTarget(e));
startVertex.setFinishOrder(counter);
counter++;
}
}
public static void main(String[] args) {
...
for (SteveVertex v: graph.vertexSet())
SteveDepthFirstSearch(v);
...
}
答案 0 :(得分:0)
我能够很好地回答这个问题,如果有兴趣请点击这里: