fromPredecessorFunction method

Graph<V, E> fromPredecessorFunction(
  1. Iterable<V> vertices,
  2. Iterable<V> predecessors(
    1. V vertex
    )
)

Creates a Graph from start vertices and a function predecessors returning its preceding vertices (incoming adjacency).

Implementation

Graph<V, E> fromPredecessorFunction(
    Iterable<V> vertices, Iterable<V> Function(V vertex) predecessors) {
  final builder = newBuilder();
  final todo = QueueList<V>();
  final seen = vertexStrategy.createSet();
  for (final vertex in vertices) {
    builder.addVertex(vertex);
    todo.add(vertex);
    seen.add(vertex);
  }
  while (todo.isNotEmpty) {
    final vertex = todo.removeFirst();
    for (final predecessor in predecessors(vertex)) {
      builder.addEdge(predecessor, vertex);
      if (seen.add(predecessor)) {
        todo.add(predecessor);
      }
    }
  }
  return builder.build();
}