import graph {
AdjacencyGraph
}
import graph.traversal {
GenericVertexTraversal=VertexTraversal,
BfsTraversal
}
import graph.traversal.visitor {
GenericVertexVisitor=VertexVisitor,
traversalVisitors
}
"Implementation of an implicit adjacency graph defined by a root vertex and a neighbors function."
by ("ThorstenSeitz")
shared class ImplicitAdjacencyGraph<V>(
V root,
shared actual default {V*} neighbors(V vertex))
satisfies AdjacencyGraph<V>
given V satisfies Object {
// Aliases without type parameters
shared interface VertexTraversal => GenericVertexTraversal<V,ImplicitAdjacencyGraph<V>>;
shared interface VertexVisitor => GenericVertexVisitor<V>;
shared actual default Boolean empty => false;
"Breadth first traversal of the receiver."
shared VertexTraversal bfsTraversal(
V start,
VertexVisitor visitor = traversalVisitors.nullVertexVisitor<V>()) => BfsTraversal(this, start, visitor);
}