Graphs topic
Graph data structures, sorting, traversal, and graph algorithms & utilities.
Table of Contents:
Walkables
Sector provides foundational sequential access to graph nodes, or
Walkable, which is to iterable what Graph is to List, representing a
collection of nodes and edges:
void example(Walkable<String> walkable) {
  for (final node in walkable.roots) {
    for (final successor in walkable.successors(node)) {
      print('$node -> $successor');
    }
  }
}
Ephemeral collections can be created without needing a concrete implementation:
// a -> b -> c
Walkable.linear(['a', 'b', 'c']);
// a -> b -> a
Walkable.circular(['a', 'b']);
//    a
//   / \
//  b - c
Walkable.star(['a', 'b', 'c']);
See also WeightedWalkable, a variant of Walkable that includes floating
point edge weights, and can be derived using Walkable.asWeighted; algorithms
that can operate on both types of walkables can be implemented in terms of
WalkableBase (which many algorithms in this package do).
Graphs
Graphs are a collection of nodes, and edges between nodes.
Sector contains an interface and concrete implementation, Graph and
AdjacencyListGraph, respectively, which is an
adjacency list
representation of a graph, ideal for sparse (few edges) graphs:
final graph = Graph<String>();
graph.addEdge(Edge('a', 'b'));
graph.addEdge(Edge('b', 'c'));
print(graph.roots); // ['a']
print(graph.successors('b')); // ['c']
By default, most graphs are directed, meaning an edge has an explicit
source and target node. However, undirected graphs can be created by
using directed: false, or by mixing-in the UndirectedGraph mixin:
final graph = Graph<String>(directed: false);
graph.addEdge(Edge('a', 'b'));
print(graph.successors('a')); // ['b']
print(graph.successors('b')); // ['a']
// ...
final class MyUndirectedGraph<E> = MyGraph<E> with UndirectedGraph<E> {}
Sorting and Traversing
A few utilities are provided for sorting and traversing graphs:
topologicalSortfor sorting a directed acyclic graph dependency order.stronglyConnectedand for finding cycles (strong components) in a graph.breadthFirstfor traversing a graph in breadth-first (shallower-first) order.depthFirstfor traversing a graph in depth-first (deeper-first) order.
Classes
- 
  AdjacencyListGraph<
E> Graphs - An unweighted graph suitable for sparse graphs.
 - 
  Edge<
E> Graphs - A graph edge connecting two nodes.
 - 
  Graph<
E> Graphs - A collection of nodes and edges where edges connect exactly two nodes.
 - 
  GraphBase<
E> Graphs - A base interface for graphs.
 - 
  ScalarEvent<
E> Graphs - A captured Tracer.pushScalar event.
 - 
  SkipEvent<
E> Graphs - A captured Tracer.onSkip event.
 - 
  TraceEvent<
E> Graphs - An event captured by a TraceRecorder.
 - 
  Tracer<
E> Graphs - A utility for capturing events during a graph traversal or pathfinding.
 - 
  TraceRecorder<
E> Graphs - A utility for recording events during a graph traversal or pathfinding.
 - 
  VisitEvent<
E> Graphs - A captured Tracer.onVisit event.
 - 
  Walkable<
E> Graphs - A collection of values, or "nodes", that can be traversed incrementally.
 - 
  WalkableBase<
E> Graphs - A base interface for walkable collections.
 - 
  WeightedEdge<
V> Graphs - A weighted graph edge connecting two nodes.
 - 
  WeightedGraph<
V> Graphs - A graph where edges have an associated weight, or "cost", a double value.
 - 
  WeightedWalkable<
E> Graphs - A collection of nodes and edges that can be traversed incrementally.
 
Mixins
- 
  UndirectedGraph<
E> Graphs - A mixin that that adapts a Graph to be undirected.
 
Functions
- 
  breadthFirst<
T> (WalkableBase< GraphsT> graph, {required T start, Tracer<T> ? tracer}) → Iterable<T>  - 
  Visits nodes in a 
graphstructure, shallowest nodes first, fromstart. - 
  depthFirst<
T> (WalkableBase< GraphsT> graph, {required T start, Tracer<T> ? tracer}) → Iterable<T>  - 
  Visits nodes in a 
graphstructure, deepest nodes first, fromstart. - 
  stronglyConnected<
T> (WalkableBase< GraphsT> graph, {Iterable<T> ? from, Tracer<T> ? tracer}) → List<List< T> > - 
  Partitions nodes reachable in a 
graphinto strongly connected components. - 
  topologicalSort<
T> (Iterable< GraphsT> roots, {required Iterable<T> successors(T)}) → List<T>  - Returns a topological sort of the directed edges provided, if one exists.
 
Typedefs
- 
    Crawler<
E> = Iterable< T> Function<T extends E>(WalkableBase< GraphsT> nodes, {required T start, Tracer<T> ? tracer}) - 
    A function that visits 
nodesin a graph structure starting fromstart. 
Exceptions / Errors
- 
  CycleException<
T> Graphs - Indicates a cycle was detected in a graph expected to be acyclic.