test

package main

import (
  "fmt"
)

//记录每次计算的叶子节点
var leafMap= make(map[string][]string)

//记录已经排好顺序的节点
var sortJobs = []string{}

//往map里边放job,key为name,value为job依赖的job名
func createJob(jobMap map[string][]string,name string, dep []string) {
  jobMap[name] = dep
}

//递归计算job的依赖,每次从map中删除掉无依赖的类似叶子节点的key
func assignJob(jobMap map[string][]string) {
  job :=""
  for k,v := range jobMap {
    if(len(v) == 0){
      job += k
      createJob(leafMap,k,v)
      delete(jobMap,k)
    }
  }
  sortJobs = append(sortJobs,job)

  for k,v := range jobMap {
    for i,dep := range v {
      if _,ok := leafMap[dep]; ok {
        v = append(v[:i], v[i+1:]...)
        jobMap[k] = v;
      }
    }
  }

  if(len(jobMap)>0){
    assignJob(jobMap)
  }
}

func main(){
  fmt.Println("start")
  //初始化一个job 集合
  jobMap := make(map[string][]string) 
  createJob(jobMap,"a",[]string{"b"})
  createJob(jobMap,"b",[]string{"c","d"})
  createJob(jobMap,"c",nil)
  createJob(jobMap,"d",[]string{"e"})
  createJob(jobMap,"e",nil)

  //递归计算job依赖
  assignJob(jobMap)

  //打印排好顺序的job列表
  fmt.Println(sortJobs)
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值