Я не уверен, как именно работает этот кусок кода. Я пытался реализовать это, но я не совсем понимаю, что здесь происходит ...
class GraphIterator implements Iterator<Vertex> {
private Queue<Vertex> nodes;
private Set<Vertex> colored;
public GraphIterator(Graph g, Vertex v) {
this.colored = new TreeSet<>();
this.nodes = new LinkedList<>();
makeOrderedCopy(g, v);
}
private void makeOrderedCopy(Graph g, Vertex v) {
colored.add(v);
List<Vertex> neighbours = g.getNeighbours(v);
neighbours.sort(Comparator.comparingInt(Vertex::getId));
nodes.add(v);
for (Vertex neighbour : neighbours) {
if (!colored.contains(neighbour)) {
makeOrderedCopy(g, neighbour);
}
}
}
@Override
public boolean hasNext() {
Vertex next = nodes.peek();
return next != null;
}
@Override
public Vertex next() {
if (hasNext()) {
return nodes.poll();
} else {
return null;
}
}
}