public PathIterator(Node target) { nodes = new ArrayList<Node>(); iterators = new ArrayList<Iterator<Edge>>(); if (Double.isInfinite(getPathLength(target))) { nextPath = null; return; } nodes.add(target); iterators.add(target.getEnteringEdgeIterator()); extendPath(); constructNextPath(); }
public PathIterator(Node target) { nodes = new ArrayList<Node>(); iterators = new ArrayList<Iterator<Edge>>(); if (Double.isInfinite(getPathLength(target))) { nextPath = null; return; } nodes.add(target); iterators.add(target.getEnteringEdgeIterator()); extendPath(); constructNextPath(); }
protected void extendPathStep() { int last = nodes.size() - 1; Node v = nodes.get(last); double lengthV = getPathLength(v); Iterator<Edge> it = iterators.get(last); while (it.hasNext()) { Edge e = it.next(); Node u = e.getOpposite(v); if (getPathLength(u) + getLength(e, v) == lengthV) { nodes.add(u); iterators.add(u.getEnteringEdgeIterator()); return; } } nodes.remove(last); iterators.remove(last); }
protected void extendPathStep() { int last = nodes.size() - 1; Node v = nodes.get(last); double lengthV = getPathLength(v); Iterator<Edge> it = iterators.get(last); while (it.hasNext()) { Edge e = it.next(); Node u = e.getOpposite(v); if (getPathLength(u) + getLength(e, v) == lengthV) { nodes.add(u); iterators.add(u.getEnteringEdgeIterator()); return; } } nodes.remove(last); iterators.remove(last); }
@SuppressWarnings("unchecked") public T next() { if (next == null) throw new NoSuchElementException(); iterator[next.getIndex()] = directed ? next.getLeavingEdgeIterator() : next.getEnteringEdgeIterator(); Node previous = next; gotoNext(); return (T) previous; }
@SuppressWarnings("unchecked") public T next() { if (next == null) throw new NoSuchElementException(); iterator[next.getIndex()] = directed ? next.getLeavingEdgeIterator() : next.getEnteringEdgeIterator(); Node previous = next; gotoNext(); return (T) previous; }
protected void gotoNext() { while (next != null) { int i = next.getIndex(); while (iterator[i].hasNext()) { Node neighbor = iterator[i].next().getOpposite(next); int j = neighbor.getIndex(); if (iterator[j] == null) { parent[j] = next; iterator[j] = directed ? neighbor.getLeavingEdgeIterator() : neighbor.getEnteringEdgeIterator(); depth[j] = depth[i] + 1; if (depth[j] > maxDepth) maxDepth = depth[j]; next = neighbor; return; } } next = parent[i]; } }
protected void gotoNext() { while (next != null) { int i = next.getIndex(); while (iterator[i].hasNext()) { Node neighbor = iterator[i].next().getOpposite(next); int j = neighbor.getIndex(); if (iterator[j] == null) { parent[j] = next; iterator[j] = directed ? neighbor.getLeavingEdgeIterator() : neighbor.getEnteringEdgeIterator(); depth[j] = depth[i] + 1; if (depth[j] > maxDepth) maxDepth = depth[j]; next = neighbor; return; } } next = parent[i]; } }