Graph

com.phasmidsoftware.gryphon.core.Graph
See theGraph companion object
trait Graph[V] extends Traversable[V]

A trait representing an abstract graph structure composed of vertices.

All traversal methods delegate to the VertexMap which in turn uses the Visitor V1.2.0 typeclass engine (Traversal.dfs / Traversal.bfs). The mutable discovered flag pattern has been removed throughout; visited-node tracking is handled by the immutable VisitedSet[V] inside the engine.

Type parameters

V

the type representing the vertex attributes (invariant).

Attributes

Companion
object
Graph
Supertypes
trait Traversable[V]
class Object
trait Matchable
class Any
Known subtypes
class AbstractGraph[V]
class DirectedGraph[V, E]
trait DAG[V, E]
class UndirectedGraph[V, E]
trait EdgeGraph[V, E]

Members list

Value members

Abstract methods

def isBipartite: Boolean

Returns true if this graph is bipartite (2-colorable).

Returns true if this graph is bipartite (2-colorable).

For undirected graphs: true iff the graph contains no odd-length cycle. For directed graphs: not yet implemented — throws UnsupportedOperationException.

Attributes

def isConnected: Boolean

Returns true if this graph is connected.

Returns true if this graph is connected.

For undirected graphs: true iff every vertex is reachable from every other. For directed graphs: semantics (strong vs weak connectivity) are implementation-defined and not yet supported — throws UnsupportedOperationException.

Attributes

def isCyclic: Boolean

Determines if the graph contains any cycles.

Determines if the graph contains any cycles.

Attributes

Returns

true if the graph has at least one cycle, false otherwise.

def unit(vertexMap: VertexMap[V]): Graph[V]

Creates a new graph using the provided vertex map.

Creates a new graph using the provided vertex map.

Value parameters

vertexMap

the vertex map for the new graph.

Attributes

Returns

a new graph instance.

Retrieves the vertex map representation of the graph.

Retrieves the vertex map representation of the graph.

Attributes

Returns

the VertexMap[V] backing this graph.

Concrete methods

def addVertex(vertex: Vertex[V]): Graph[V]

Adds a new vertex to the graph, returning a new graph instance.

Adds a new vertex to the graph, returning a new graph instance.

Value parameters

vertex

the vertex to be added.

Attributes

Returns

a new graph containing the added vertex.

def bfs[R, J <: Appendable[(V, Option[R])]](visitor: Visitor[V, R, J])(v: V, goal: V => Boolean = ...)(using ev: Evaluable[V, R], random: Random): Visitor[V, R, J]

Performs BFS from v, accumulating results into visitor.

Performs BFS from v, accumulating results into visitor.

Type parameters

J

the journal type.

R

the result type.

Value parameters

goal

early-termination predicate (default: never stop early).

v

the starting vertex.

visitor

the visitor accumulating results.

Attributes

Returns

the updated visitor after traversal.

def bfse[E, R, J <: Appendable[(Edge[V, E], Option[R])]](visitor: Visitor[Edge[V, E], R, J])(v: V)(goal: V => Boolean)(using ev: Evaluable[Edge[V, E], R], random: Random): Visitor[Edge[V, E], R, J]

BFS over edges rather than vertices.

BFS over edges rather than vertices.

Type parameters

E

the type of the edge attribute.

J

the journal type.

R

the result type.

Value parameters

goal

early-termination predicate on destination vertices.

v

the starting vertex.

visitor

the visitor processing edges.

Attributes

Returns

the visitor after traversal.

def debug: String
def dfs[R, J <: Appendable[(V, Option[R])]](visitor: Visitor[V, R, J], order: DfsOrder = ...)(v: V)(using ev: Evaluable[V, R], random: Random): Visitor[V, R, J]

Performs DFS from v, accumulating results into visitor.

Performs DFS from v, accumulating results into visitor.

Type parameters

J

the journal type.

R

the result type extracted from each node by Evaluable.

Value parameters

v

the starting vertex.

visitor

the visitor accumulating results.

Attributes

Returns

the updated visitor after traversal.

def dfsAll[R, J <: Appendable[(V, Option[R])]](visitor: Visitor[V, R, J])(using ev: Evaluable[V, R], random: Random): Visitor[V, R, J]

Performs DFS for all vertices in the graph, including those unreachable from any single start vertex.

Performs DFS for all vertices in the graph, including those unreachable from any single start vertex.

Type parameters

J

the journal type.

R

the result type.

Value parameters

visitor

the visitor accumulating results.

Attributes

Returns

the updated visitor after traversing all vertices.

def undiscoveredEdges[E](v: V)(using random: Random = ...): Seq[Edge[V, E]]

Returns the directed edges reachable from v.

Returns the directed edges reachable from v.

Attributes

def undiscoveredVertices[E](v: V)(using random: Random = ...): Seq[V]

Returns the vertices reachable via attributed directed edges from v. Useful for testing and inspection; the traversal engine manages visited state internally via VisitedSet.

Returns the vertices reachable via attributed directed edges from v. Useful for testing and inspection; the traversal engine manages visited state internally via VisitedSet.

Attributes

Inherited methods

def filteredAdjacentVertices(predicate: V => Boolean)(v: V): Iterator[V]

Filters the adjacent vertices of a given vertex based on a specified predicate.

Filters the adjacent vertices of a given vertex based on a specified predicate.

Value parameters

predicate

a function that evaluates each adjacent vertex and returns true if the vertex satisfies the specified condition.

v

the vertex whose adjacent vertices are to be filtered.

Attributes

Returns

an iterator over the vertices that are adjacent to v and satisfy the predicate.

Inherited from:
Traversable
def getConnexions[E](start: V): Connexions[V, E]

Retrieves the connexions (edges) reachable from start via DFS.

Retrieves the connexions (edges) reachable from start via DFS.

Type parameters

E

the type of the edges in the graph.

Value parameters

start

the starting vertex.

Attributes

Returns

a Connexions[V, E] object representing the discovered connexions.

Inherited from:
Traversable
def graphNeighbours(using random: Random): GraphNeighbours[V]

Derives a GraphNeighbours[V] instance from adjacentVertices. Used internally by the default implementations of vertexMappedTraversalDfs, vertexMappedTraversalBfs, and getConnexions.

Derives a GraphNeighbours[V] instance from adjacentVertices. Used internally by the default implementations of vertexMappedTraversalDfs, vertexMappedTraversalBfs, and getConnexions.

CONSIDER making this protected again but that requires multiple instances in each type of Traversal.

NOTE: do not be tempted to add a default Random implementation for this context. We need to enforce consistency of Random instances.

Attributes

Inherited from:
Traversable
def vertexMappedTraversalBfs[T](fulfill: V => T)(start: V)(using random: Random = ...): Try[TraversalResult[V, T]]

Performs a BFS traversal applying fulfill to each visited vertex and returns a VertexTraversalResult mapping each vertex to its result.

Performs a BFS traversal applying fulfill to each visited vertex and returns a VertexTraversalResult mapping each vertex to its result.

Type parameters

T

the result type produced by fulfill.

Value parameters

fulfill

transformation function applied to each vertex.

start

the starting vertex.

Attributes

Returns

Try[TraversalResult[V, T]] containing the traversal result or a failure.

Inherited from:
Traversable
def vertexMappedTraversalDfs[T](fulfill: V => T)(start: V)(using random: Random = ...): Try[TraversalResult[V, T]]

Performs a DFS traversal applying fulfill to each visited vertex and returns a VertexTraversalResult mapping each vertex to its result.

Performs a DFS traversal applying fulfill to each visited vertex and returns a VertexTraversalResult mapping each vertex to its result.

Type parameters

T

the result type produced by fulfill.

Value parameters

fulfill

transformation function applied to each vertex.

start

the starting vertex.

Attributes

Returns

Try[TraversalResult[V, T]] containing the traversal result or a failure.

Inherited from:
Traversable

Inherited and Abstract methods

def M: Int

Returns the number of edges in the graph.

Returns the number of edges in the graph.

Attributes

Returns

the number of edges in the graph.

Inherited from:
Traversable
def N: Int

Returns the number of vertices in the graph.

Returns the number of vertices in the graph.

Attributes

Returns

the number of vertices in the graph.

Inherited from:
Traversable
def adjacentVertices(v: V)(using random: Random = ...): Iterator[V]

Retrieves the adjacent vertices connected to the specified vertex.

Retrieves the adjacent vertices connected to the specified vertex.

Value parameters

v

the vertex whose adjacent vertices are to be returned.

Attributes

Returns

an iterator over the vertices adjacent to the specified vertex.

Inherited from:
Traversable
def filteredAdjacencies(predicate: Adjacency[V] => Boolean)(v: V): Iterator[Adjacency[V]]

Filters the adjacencies of a given vertex based on a specified predicate.

Filters the adjacencies of a given vertex based on a specified predicate.

Value parameters

predicate

a function that evaluates each Adjacency[V] and returns true if the adjacency satisfies the specified condition.

v

the vertex whose adjacencies are to be filtered.

Attributes

Returns

an iterator over the adjacencies of the given vertex that satisfy the predicate.

Inherited from:
Traversable
def get(key: V): Option[Vertex[V]]

Retrieves the vertex associated with the given key.

Retrieves the vertex associated with the given key.

Value parameters

key

the key of type V for which the associated vertex is to be retrieved.

Attributes

Returns

an Option containing the associated Vertex if found, or None if not.

Inherited from:
Traversable