// 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] }