reachable.go (579B)
1 // Copyright 2026 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package graph 6 7 // Reachable returns the set of nodes reachable from the given roots. 8 func Reachable[NodeID comparable](g Graph[NodeID], roots ...NodeID) map[NodeID]bool { 9 seen := make(map[NodeID]bool) 10 var visit func(node NodeID) 11 visit = func(node NodeID) { 12 if !seen[node] { 13 seen[node] = true 14 for e := range g.Out(node) { 15 visit(e) 16 } 17 } 18 } 19 for _, root := range roots { 20 visit(root) 21 } 22 return seen 23 }