Depth-First Search (DFS) and Breadth-First Search (BFS) are fundamental algorithms used for traversing or searching tree or graph data structures. Below, we provide examples of both algorithms implemented in Go.
Keywords: Go, DFS, BFS, Depth-First Search, Breadth-First Search, Graph Algorithms
Description: This content covers the implementation of Depth-First Search and Breadth-First Search algorithms in Go, showcasing usage examples for better understanding.
package main
import "fmt"
type Node struct {
Value int
Children []*Node
}
func DFS(node *Node, visited map[int]bool) {
if visited[node.Value] {
return
}
visited[node.Value] = true
fmt.Println(node.Value)
for _, child := range node.Children {
DFS(child, visited)
}
}
func main() {
root := &Node{Value: 1, Children: []*Node{
{Value: 2, Children: nil},
{Value: 3, Children: []*Node{
{Value: 4, Children: nil},
{Value: 5, Children: nil}},
},
}}
visited := make(map[int]bool)
DFS(root, visited)
}
package main
import (
"fmt"
"container/list"
)
type Node struct {
Value int
Children []*Node
}
func BFS(node *Node) {
queue := list.New()
visited := make(map[int]bool)
queue.PushBack(node)
for queue.Len() > 0 {
element := queue.Front()
queue.Remove(element)
currentNode := element.Value.(*Node)
if visited[currentNode.Value] {
continue
}
visited[currentNode.Value] = true
fmt.Println(currentNode.Value)
for _, child := range currentNode.Children {
queue.PushBack(child)
}
}
}
func main() {
root := &Node{Value: 1, Children: []*Node{
{Value: 2, Children: nil},
{Value: 3, Children: []*Node{
{Value: 4, Children: nil},
{Value: 5, Children: nil}},
},
}}
BFS(root)
}
How do I avoid rehashing overhead with std::set in multithreaded code?
How do I find elements with custom comparators with std::set for embedded targets?
How do I erase elements while iterating with std::set for embedded targets?
How do I provide stable iteration order with std::unordered_map for large datasets?
How do I reserve capacity ahead of time with std::unordered_map for large datasets?
How do I erase elements while iterating with std::unordered_map in multithreaded code?
How do I provide stable iteration order with std::map for embedded targets?
How do I provide stable iteration order with std::map in multithreaded code?
How do I avoid rehashing overhead with std::map in performance-sensitive code?
How do I merge two containers efficiently with std::map for embedded targets?