code: func BFS(t Traversal, f Iter, u T) bool {
  	fifo := NewFIFO(u)
  	for fifo.Size() > 0 {
  		next, _ := fifo.Pop()
  		if t.Visited(next) {
  			continue
  		}
  		if f(next) {
  			return true
  		}
  		for _, v := range t.Edges(next) {
  			fifo.Push(v)
  		}
  	}
  	return false
  }
docs: // BFS performs a breadth first traversal calling f for each node starting from
  // u. If f returns true, traversal stops and BFS returns true.