Mathematical programming problems in which all decision variables must have positive integer values are called general integer programming problems. If all the decision variables are restricted to have only the value zero or one, the problem is then called a zero-one programming (or binary integer programming) problem. This chapter illustrates each of these types of integer problems with typical practical examples. Branch-and-bound algorithms are widely considered to be the most effective methods for solving medium-sized general integer programming problems. These algorithms make no assumptions about the structure of a problem except that the objective function and the constraints must be linear. An essential component in any solver for integer programs or mixed integer programs is the underlying linear programming solver used for generating lower bounds, separating and selecting subproblems. Many integer programming problems can be viewed as routing problems, and numerous software packages are available to solve problems cast into this framework.