package Graph
import (
queue "Algorithm/Container"
"fmt"
"testing"
)
func bfs(node *Node) {
if node == nil {
return
}
queue := queue.NewQueue()
set := make(map[*Node]struct{}) //可能有环,所以加上他把环避开
queue.Push(node)
set[node] = struct{}{}
for !queue.Empty() {
tmp, _ := queue.Pop()
cur := tmp.(*Node)
fmt.Println(cur.Value)
for i := 0; i < len(cur.Nexts); i++ {
if _, ok := set[cur.Nexts[i]]; !ok {
set[cur.Nexts[i]] = struct{}{}
queue.Push(cur.Nexts[i])
}
}
}
}
func TestGraphBFS(t *testing.T) {
n := NewNode(1)
n1 := []*Node{NewNode(2), NewNode(3), NewNode(4), NewNode(5)}
n2 := []*Node{NewNode(6), NewNode(7), NewNode(8), NewNode(9)}
n3 := []*Node{NewNode(10), NewNode(11), NewNode(12), NewNode(13)}
n.Nexts = n2
n1[2].Nexts = n3
n2[3].Nexts = n1
bfs(n) //给一个点就可以遍历
}
图——宽度优先遍历
于 2021-10-28 14:38:31 首次发布