Branch and cut is a specific implementation of branch and bound that was first suggested in the seminal work on the subject by Padberg and Rinaldi  for solving the well-known Traveling Salesman Problem. Since then, many implementations (including ours) have been fashioned after their ideas. In branch and cut, the bounding operation is accomplished using the tools of linear programming. Typically, the integrality constraints of an integer programming formulation of the problem are relaxed to obtain a linear programming (LP) relaxation and then this formulation is strengthened by adding cutting planes, i.e. inequalities valid for the convex hull of solutions to the original problem.
Figure 1: Bounding in the branch and cut algorithm
For example, let a combinatorial optimization problem with ground set E and feasible set be given along with a cost function . The incidence vectors corresponding to the members of are usually specified as the the set of all incidence vectors obeying a (relatively) small set of inequalities. These inequalities are typically the ones used in the initial LP relaxation. Now let be the convex hull of incidence vectors of members of . Then we know by Weyl's Theorem (see ) that there exists a finite set of inequalities valid for such that
The inequalities in are the potential cutting planes to be
added to the relaxation as needed. Unfortunately, it is usually
difficult, if not impossible, to enumerate all of inequalities in
or we could simply solve the problem using linear
programming. Instead, we use separation algorithms and heuristics to
generate these inequalities when they are violated. In Figure
1, we describe more precisely how the bounding
operation is carried out in branch and cut.
Figure 2: Branching in the branch and cut algorithm
Once we have failed to either prune the current subproblem or separate the current fractional solution from , we are forced to branch. The branching operation is accomplished by specifying a set of hyperplanes which divide the current subproblem in such a way that the current solution is not feasible for the LP relaxation of any of the new subproblems. For example, in a combinatorial optimization problem, branching could be accomplished simply by fixing a variable whose current value is fractional to 0 in one branch and 1 in the other. The procedure is described more formally in Figure 2. Figure 3 gives a high level description of the entire generic branch and cut algorithm.
Figure 3: Description of the generic branch and cut algorithm
In the remainder of the paper, we will sometimes refer to the search tree. This term is derived from the useful practice of viewing the list of subproblems processed during the algorithm as the nodes of a graph in which each subproblem is connected to its parent. This graph is known as the search tree. Since the subproblems correspond to the nodes of this graph, they will sometimes be referred to as nodes in the search tree or simply as nodes. The root node or root of the tree is the first node from which all others descend.