blob: fdea880ef420e0e4953bbbc85715e687d1f5590a [file]
// Copyright 2026 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Package graph provides a common abstraction for directed graphs and standard
// graph algorithms.
//
// In general, this package does not provide or assume any concrete graph
// representation. It's up to the caller of this package to implement the
// [Graph] interface, either directly or as an adapter around another type.
package graph
import "iter"
// A Graph implements a directed graph where nodes in the graph are identified
// by the NodeID type.
//
// If a concrete graph type stores additional information about nodes and/or
// edges, it will conventionally provide methods of the form:
//
// Node(node NodeID) nodeInfo
// Edge(from, to NodeID) edgeInfo
type Graph[NodeID comparable] interface {
// Nodes yields all nodes in this graph.
Nodes() iter.Seq[NodeID]
// NumNodes returns the total number of nodes in this graph.
NumNodes() int
// Out yields the out-edges of node. Out must be deterministic, though
// otherwise there is no constraint on the order of the returned sequence.
Out(node NodeID) iter.Seq[NodeID]
}