Глубина первого обхода графика - PullRequest
0 голосов
/ 26 марта 2019

Я не уверен, как именно работает этот кусок кода. Я пытался реализовать это, но я не совсем понимаю, что здесь происходит ...

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;
    }
  }
}
...