The notes that eventually became this book were written between 1977 and 1985 for the course called Constructive Combinatorics at the University of Minnesota. This is a one-quarter (10 week) course for upper level undergraduate students. The class usually consists of mathematics and computer science majors, with an occasional engineering student. Several graduate students in computer science also attend. At Minnesota, Constructive Combinatorics is the third quarter of a three quarter sequence. The fIrst quarter, Enumerative Combinatorics, is at the level of the texts by Bogart [Bo], Brualdi [Br], Liu [Li] or Tucker [Tu] and is a prerequisite for this course. The second quarter, Graph Theory and Optimization, is not a prerequisite. We assume that the students are familiar with the techniques of enumeration: basic counting principles, generating functions and inclusion/exclusion. This course evolved from a course on combinatorial algorithms. That course contained a mixture of graph algorithms, optimization and listing algorithms. The computer assignments generally consisted of testing algorithms on examples. While we felt that such material was useful and not without mathematical content, we did not think that the course had a coherent mathematical focus. Furthermore, much of it was being taught, or could have been taught, elsewhere. Graph algorithms and optimization, for instance, were inserted into the graph theory course where they naturally belonged. The computer science department already taught some of the material: the simpler algorithms in a discrete mathematics course; effIciency of algorithms in a more advanced course.