private static Node findLowestDegreeNode(Subgraph graph) { int minDegree = Integer.MAX_VALUE; Node minDegreeNode = null; for (Iterator i = graph.nodeIterator(); i.hasNext(); ) { Node node = (Node) i.next(); if (minDegreeNode == null || node.getDegree() < minDegree) { minDegree = node.getDegree(); minDegreeNode = node; } } return minDegreeNode; }
/** * Returns all Nodes with the given number of Edges around it. */ public List findNodesOfDegree(int degree) { List nodesFound = new ArrayList(); for (Iterator i = nodeIterator(); i.hasNext(); ) { Node node = (Node) i.next(); if (node.getDegree() == degree) nodesFound.add(node); } return nodesFound; }
/** * Tests whether a complete unique path exists in a graph * using Euler's Theorem. * * @param graph the subgraph containing the edges * @return <code>true</code> if a sequence exists */ private boolean hasSequence(Subgraph graph) { int oddDegreeCount = 0; for (Iterator i = graph.nodeIterator(); i.hasNext(); ) { Node node = (Node) i.next(); if (node.getDegree() % 2 == 1) oddDegreeCount++; } return oddDegreeCount <= 2; }
private void buildEdgeStringsForNonDegree2Nodes() { for (Iterator i = graph.getNodes().iterator(); i.hasNext(); ) { Node node = (Node) i.next(); if (node.getDegree() != 2) { buildEdgeStringsStartingAt(node); node.setMarked(true); } } } private void buildEdgeStringsStartingAt(Node node) {
private void buildEdgeStringsForUnprocessedNodes() { for (Iterator i = graph.getNodes().iterator(); i.hasNext(); ) { Node node = (Node) i.next(); if (!node.isMarked()) { Assert.isTrue(node.getDegree() == 2); buildEdgeStringsStartingAt(node); node.setMarked(true); } } } private void buildEdgeStringsForNonDegree2Nodes() {
boolean hasDegree1Node = startNode.getDegree() == 1 || endNode.getDegree() == 1; if (endEdge.getToNode().getDegree() == 1 && endEdge.getEdgeDirection() == false) { hasObviousStartNode = true; flipSeq = true; if (startEdge.getFromNode().getDegree() == 1 && startEdge.getEdgeDirection() == true) { hasObviousStartNode = true; flipSeq = false; if (startEdge.getFromNode().getDegree() == 1) flipSeq = true;
/** * Returns the directed edge that starts at this directed edge's end point, or null * if there are zero or multiple directed edges starting there. * @return the directed edge */ public LineMergeDirectedEdge getNext() { if (getToNode().getDegree() != 2) { return null; } if (getToNode().getOutEdges().getEdges().get(0) == getSym()) { return (LineMergeDirectedEdge) getToNode().getOutEdges().getEdges().get(1); } Assert.isTrue(getToNode().getOutEdges().getEdges().get(1) == getSym()); return (LineMergeDirectedEdge) getToNode().getOutEdges().getEdges().get(0); } }
private static Node findLowestDegreeNode(Subgraph graph) { int minDegree = Integer.MAX_VALUE; Node minDegreeNode = null; for (Iterator i = graph.nodeIterator(); i.hasNext(); ) { Node node = (Node) i.next(); if (minDegreeNode == null || node.getDegree() < minDegree) { minDegree = node.getDegree(); minDegreeNode = node; } } return minDegreeNode; }
/** * Returns all Nodes with the given number of Edges around it. */ public List findNodesOfDegree(int degree) { List nodesFound = new ArrayList(); for (Iterator i = nodeIterator(); i.hasNext(); ) { Node node = (Node) i.next(); if (node.getDegree() == degree) nodesFound.add(node); } return nodesFound; }
/** * Tests whether a complete unique path exists in a graph * using Euler's Theorem. * * @param graph the subgraph containing the edges * @return <code>true</code> if a sequence exists */ private boolean hasSequence(Subgraph graph) { int oddDegreeCount = 0; for (Iterator i = graph.nodeIterator(); i.hasNext(); ) { Node node = (Node) i.next(); if (node.getDegree() % 2 == 1) oddDegreeCount++; } return oddDegreeCount <= 2; }
private void buildEdgeStringsForNonDegree2Nodes() { for (Iterator i = graph.getNodes().iterator(); i.hasNext(); ) { Node node = (Node) i.next(); if (node.getDegree() != 2) { buildEdgeStringsStartingAt(node); node.setMarked(true); } } } private void buildEdgeStringsStartingAt(Node node) {
private void buildEdgeStringsForUnprocessedNodes() { for (Iterator i = graph.getNodes().iterator(); i.hasNext(); ) { Node node = (Node) i.next(); if (!node.isMarked()) { Assert.isTrue(node.getDegree() == 2); buildEdgeStringsStartingAt(node); node.setMarked(true); } } } private void buildEdgeStringsForNonDegree2Nodes() {
boolean hasDegree1Node = startNode.getDegree() == 1 || endNode.getDegree() == 1; if (endEdge.getToNode().getDegree() == 1 && endEdge.getEdgeDirection() == false) { hasObviousStartNode = true; flipSeq = true; if (startEdge.getFromNode().getDegree() == 1 && startEdge.getEdgeDirection() == true) { hasObviousStartNode = true; flipSeq = false; if (startEdge.getFromNode().getDegree() == 1) flipSeq = true;
/** * Returns the directed edge that starts at this directed edge's end point, or null * if there are zero or multiple directed edges starting there. * @return the directed edge */ public LineMergeDirectedEdge getNext() { if (getToNode().getDegree() != 2) { return null; } if (getToNode().getOutEdges().getEdges().get(0) == getSym()) { return (LineMergeDirectedEdge) getToNode().getOutEdges().getEdges().get(1); } Assert.isTrue(getToNode().getOutEdges().getEdges().get(1) == getSym()); return (LineMergeDirectedEdge) getToNode().getOutEdges().getEdges().get(0); } }