Graph algorithms that do not specify a particular approach for representing a Graph.
Functions in this package will take arguments that provide the mechanism for traversing the graph. For example two common approaches for representing a graph:
class Graph { Map<Node, List<Node>> nodes; } class Node { // Interesting data }
class Graph { Node root; } class Node { List<Node> edges; // Interesting data }
Any representation can be adapted to the needs of the algorithm:
T does not correctly or efficiently implement hashCode or ==, you may provide optional equals and/or hashCode functions are parameters.edges function which provides the reachable nodes.(node) => graph[node](node) => node.edgesGraphs that are resolved asynchronously will have similar functions which return FutureOr.