Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import "fmt"
- type Services interface {
- AddService(service int, dependency int)
- GetAncestors(service int, depth int)
- }
- type ServiceManager struct {
- servicemap map[int][]int
- }
- func (servicemanager *ServiceManager) AddService(service, dependency int) {
- servicemanager.servicemap[service] = append(servicemanager.servicemap[service], dependency)
- }
- func (serviceManager *ServiceManager) GetAncestors(service, depth int) []int { //added depth
- visited := make(map[int]bool) //to avoid dupicate results
- var res []int
- var dfs func(service, depth int)
- dfs = func(service, depth int) {
- if depth == 0 {
- return
- }
- for _, dep := range serviceManager.servicemap[service] {
- if !visited[dep] {
- visited[dep] = true
- res = append(res, dep)
- dfs(dep, depth-1)
- }
- }
- }
- dfs(service, depth)
- return res
- }
- func main() {
- serviceManager := &ServiceManager{
- servicemap: make(map[int][]int),
- }
- serviceManager.AddService(0, 1)
- serviceManager.AddService(1, 2)
- fmt.Println(serviceManager.GetAncestors(0, 1))
- serviceManager.AddService(0, 3)
- serviceManager.AddService(3, 4)
- fmt.Println(serviceManager.GetAncestors(0, 2))
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement