golang BFS DFS

突然想起一个面试题,用go实现不太好写,明天在想有什么好的方法实现图,暂时就想到这么实现,具体分析看代码注释

在这里插入图片描述

package main

import "fmt"

type list struct {
	data string
	next []*list  //代表每个节点能够访问的节点,比如v0的next为v1,v2,v3
}
var m map[string]bool
func DFS(row []*list){
	if len(row) == 0 {
		return
	}
	//跟一个节点沿着一条路径走到头,走到头之后再进行下一个节点
	for i := range row {
		if ok,_ := m[row[i].data];!ok{
			fmt.Print(row[i].data, " ")
			m[row[i].data] = true
			if len(row[i].next) > 0 {
				DFS(row[i].next)
			} 
		}		
	}
}

func BFS(row []*list){
	if len(row) == 0 {
		return
	}
	//下一层的点的集合
	nextRow := make([]*list, 0)
	//遍历当前层所有点,未被访问则输出并将该点能访问的点加到nextRow
	for i := range row {
		if ok, _ := m[row[i].data];!ok {
			fmt.Print(row[i].data," ")
			m[row[i].data] = true
			if len(row[i].next) != 0 {
				nextRow = append(nextRow, row[i].next...)
			}
		}	
	}
	BFS(nextRow)
}

func main(){
	m = make(map[string]bool)
	v0 := &list{data : "v0"}
	v1 := &list{data : "v1"}
	v2 := &list{data : "v2"}
	v3 := &list{data : "v3"}
	v4 := &list{data : "v4"}
	v5 := &list{data : "v5"}
	v6 := &list{data : "v6"}
	v0.next = append(v0.next, v1,v2,v3)
	v2.next = append(v2.next, v4)
	v1.next = append(v1.next, v4,v5)
	v3.next = append(v3.next, v5)
	v4.next = append(v4.next, v6)
	v5.next = append(v5.next, v6)
	fmt.Print("DFS : ")
	DFS([]*list{v0})
	m = make(map[string]bool)
	fmt.Print("\nBFS : ")
	BFS([]*list{v0})
}




肯定不是最好的实现方法,欢迎一起讨论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值