package Graph
import (
"Algorithm/Container"
"fmt"
"testing"
)
func dfs(node *Node) {
if node == nil {
return
}
stack := Container.NewStack()
set := make(map[*Node]struct{}) //保证不要重复进
stack.Push(node)
set[node] = struct{}{}
fmt.Println(node.Value) //替换成具体行为
for !stack.IsEmpty() {
cur := stack.Pop().(*Node)
//fmt.Println(cur)
for i := 0; i < len(cur.Nexts); i++ {
if _, ok := set[cur.Nexts[i]]; !ok {
stack.Push(cur) //栈里记录的是深度优先遍历的路径
stack.Push(cur.Nexts[i])
set[cur.Nexts[i]] = struct{}{}
fmt.Println(cur.Nexts[i].Value) //替换成具体行为
break
}
}
}
}
func TestGraphDFS(t *testing.T) {
//matrix:=[][]int{
// {1,2,3},
// {2,2,5},
// {3,5,7},
// {5,5,8},
//}
//g:=CreateGraph(matrix)
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
dfs(n) //给一个点就可以遍历
}
图——深度优先遍历
于 2021-10-28 14:39:43 首次发布