图——深度优先遍历

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)  //给一个点就可以遍历
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

metabit

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值