34 lines
1.2 KiB
Go
34 lines
1.2 KiB
Go
// 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]
|
|
}
|