Мне нужно сосчитать все узлы между несколькими начальными узлами и одним узлом назначения.
Я настроил traverser для подсчета, но в некоторых случаях в путях есть петли, и процедура не заканчивается.
Что я могу сделать?
Это код Java:
Node destination = db.findNode(Label.label("Job"), "jobId", jobId);
HashSet<Long> startNodes = new HashSet<>();
HashSet<Long> pathNodes = new HashSet<>();
int numPaths = 0;
ResourceIterator<Node> iterator = db.findNodes(Labels.Inicio);
while (iterator.hasNext()){
startNodes.add(iterator.next().getId());
}
TraversalDescription td = db.traversalDescription()
.depthFirst()
.uniqueness( Uniqueness.NODE_PATH )
.expand(PathExpanders.forTypeAndDirection(RelTypes.SIGUIENTE, Direction.INCOMING))
.evaluator(new Evaluator() {
@Override
public Evaluation evaluate(Path path) {
if( startNodes.contains(path.endNode().getId())) {
return Evaluation.INCLUDE_AND_PRUNE;
}
return Evaluation.EXCLUDE_AND_CONTINUE;
}
});
while(numPaths < startNodes.size()){
for ( Path allpath: td.traverse(destination)) {
for (Node node : allpath.nodes()) {
pathNodes.add(node.getId());
}
numPaths+=1;
}
}
return Stream.of(new LongResult((long)pathNodes.size()));
}
Заранее спасибо!