Logo

Programming-Idioms

This language bar is your friend. Select your favorite languages!

Idiom #129 Breadth-first traversal in a graph

Call the function f on every vertex accessible from the vertex start, in breadth-first prefix order

A graph having 5 vertices and 6 edges
func (start *Vertex) Bfs(f func(*Vertex)) {
	queue := []*Vertex{start}
	seen := map[*Vertex]bool{start: true}
	for len(queue) > 0 {
		v := queue[0]
		queue = queue[1:]
		f(v)
		for next, isEdge := range v.Neighbours {
			if isEdge && !seen[next] {
				queue = append(queue, next)
				seen[next] = true
			}
		}
	}
}

Bfs is a method of type *Vertex : the receiver is the start node.
The function f is a parameter of the traversal method.

New implementation...