有向图遍历
深度优先遍历
func depthFirst(m map[string][]string) []string {
var order []string
seen := make(map[string]bool)
var visitAll func(items []string)
visitAll = func(items []string) {
for _, item := range items {
if !seen[item] {
seen[item] = true
visitAll(m[item])
order = append(order, item)
}
}
}
var keys []string
for key := range m {
keys = append(keys, key)
}
sort.Strings(keys)
visitAll(keys)
return order
}
广度优先遍历(目前遍历方向不对)
func breadthFirst(m map[string][]string) []string {
var order []string
seen := make(map[string]bool)
var visitAll func(worklist []string)
visitAll = func(worklist []string) {
for len(worklist) > 0 {
items := worklist
worklist = nil
for _, item := range items {
if !seen[item] {
seen[item] = true
order =