sclass BreadthFirstPathFinder implements Steppable { new LinkedList queue; MultiMap links; IF1> getChildren; void add(A a, A prev default null) { if (!links.containsKey(a)) { links.put(a, prev); queue.add(node); } } public bool step() { if (empty(queue)) false; A a = popFirst(queue); fOr (A b : getChildren.get(a)) add(b, a); true; } }