src/services/reach.go
BeforeProposed
+16−2
11package services
2import "sort"
3// Closed loops are legal in mapped drainage assets. A visited set prevents
4// repeated traversal, and a set per destination deduplicates diamond paths.
25func Reach(graph map[string][]string,source string) []string {
3 // TODO: trace all downstream assets without looping.
4 return []string{}
6 visited:=map[string]bool{source:true}
7 queue:=append([]string{},graph[source]...)
8 reached:=[]string{}
9 for len(queue)>0 {
10 node:=queue[0]
11 queue=queue[1:]
12 if visited[node] { continue }
13 visited[node]=true
14 reached=append(reached,node)
15 queue=append(queue,graph[node]...)
16 }
17 sort.Strings(reached)
18 return reached
519}