/** * * @param root root node of the subgraph. * @return true if the subgraph rooted at {@code root} contains no cycles. */ public boolean isDag(IndexedWord root) { Set<IndexedWord> unused = wordMapFactory.newSet(); unused.addAll(this.getSubgraphVertices(root)); while (!unused.isEmpty()) { IndexedWord arbitrary = unused.iterator().next(); boolean result = isDagHelper(arbitrary, unused, wordMapFactory.newSet()); if (result) { return false; } } return true; }
Set<IndexedWord> subgraphNodeSet = sg.getSubgraphVertices(rootNode); Set<IndexedWord> reachableSet = sg.getSubgraphVertices(child); if (reachableSet.contains(rootNode)) { throw new IllegalArgumentException("Subtree cannot contain cycle leading back to root node!");
/** * * @param root root node of the subgraph. * @return true if the subgraph rooted at {@code root} contains no cycles. */ public boolean isDag(IndexedWord root) { Set<IndexedWord> unused = wordMapFactory.newSet(); unused.addAll(this.getSubgraphVertices(root)); while (!unused.isEmpty()) { IndexedWord arbitrary = unused.iterator().next(); boolean result = isDagHelper(arbitrary, unused, wordMapFactory.newSet()); if (result) { return false; } } return true; }
/** * * @param root root node of the subgraph. * @return true if the subgraph rooted at {@code root} contains no cycles. */ public boolean isDag(IndexedWord root) { Set<IndexedWord> unused = wordMapFactory.newSet(); unused.addAll(this.getSubgraphVertices(root)); while (!unused.isEmpty()) { IndexedWord arbitrary = unused.iterator().next(); boolean result = isDagHelper(arbitrary, unused, wordMapFactory.newSet()); if (result) { return false; } } return true; }