Branch and bound is a general algorithm for finding optimal solutions to combinatorial optimization and constraint optimization problems (COPs) by systematically exploring a tree of candidate solutions. The algorithm operates by recursively partitioning the solution space into smaller subproblems (branching) and calculating optimistic bounds on the best possible objective value within each partition. Subproblems (or branches) whose bound proves they cannot contain a better solution than the best one found so far are discarded (pruning), dramatically reducing the search space.
