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

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.
The function f is a parameter of the traversal method.