Я, кажется, столкнулся с неинтуитивным расхождением между тем, как вершины хранятся в графиках jgrapht (в данном случае SimpleDirectedGraph) в vertexSet, а также как они хранятся в качестве цели края (см. Ниже для моего использования getEdgeTarget). Я думал, что они идентичны - то есть они указывают на один и тот же объект (например, SteveVertex) и имеют один и тот же хэш-код - но они, кажется, расположены в разных местах, как-то, за один признак ниже.Jgrapht: Является ли целевая вершина ребра, хранящегося иначе, чем одна и та же вершина в наборе вершин граф?
Когда мой код ниже встречает цикл, в котором он встречает исходную начальную вершину как цель ребра, она не показывает эту вершину как посещенную, хотя hashCode (SteveVertex @ vertex1) идентичен к первой записи вершинного набора, которая показывает, что вершина была посещена.
Любая помощь будет принята с благодарностью при диагностике этого.
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);
...
}