| // 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 |
| |
| // Reachable returns the set of nodes reachable from the given roots. |
| func Reachable[NodeID comparable](g Graph[NodeID], roots ...NodeID) map[NodeID]bool { |
| seen := make(map[NodeID]bool) |
| var visit func(node NodeID) |
| visit = func(node NodeID) { |
| if !seen[node] { |
| seen[node] = true |
| for e := range g.Out(node) { |
| visit(e) |
| } |
| } |
| } |
| for _, root := range roots { |
| visit(root) |
| } |
| return seen |
| } |