我正在尝试使用 neo4j 来实现 SCC 算法来存储图形。
这是我的 DFS 实现:
void dfs(GraphDatabaseService g, Node node, long counter) {
Transaction tx = g.beginTx();
node.setProperty("explored", true);
tx.success();
tx.finish();
System.out.println("Exporing node " + node.getProperty("name") + "with depth " + counter);
Iterator<Relationship> it = node.getRelationships(Direction.OUTGOING, RelTypes.KNOWS).iterator();
while (it.hasNext()) {
Node end = it.next().getEndNode();
if (!(boolean) end.getProperty("explored"))
dfs(g, end, ++counter);
}
}
它抛出 StackOverflowError。嗯,显而易见的原因是递归深度变得太大了。但也许我的代码有问题?