For one or two term introductory courses in discrete mathematics. This book provides an accessible introduction to discrete mathematics through an algorithmic approach that focuses on problem-solving techniques with woven techniques of proofs into the text as a running theme. Each chapter has a problem-solving corner that shows students how to attack and solve problems. The topics are based upon the recommendations of various professional organizations, including those of the MAAs Panel on Discrete Mathematics in the First Two Years, the NCTMs Principles and Standards for School Mathematics, and the CBMSs recommendations for the mathematical education of teachers. Although designed for a one-semester course, the book contains more material then can be covered in either one semester or two quarters. Consequently, instructors will have freedom to choose topics tailored to the particular needs and interests of their students. The sequence of chapters allows considerable flexibility in teaching a course from this book. Although this book assumes only the familiarity with logic and proofs ordinarily gained in high-school geometry, Appendix A is provided for those who prefer a more formal treatment. If this appendix is covered, it may be taught at any time as an independent unit or in combination with Chapter 9. The exercise sets in this book have been designed for flexibility. Many straightforward computational and algorithmic exercises are included after each section. These exercises give students hands-on practice with the concepts and algorithms of discrete mathematics and are especially important for students whose mathematical backgrounds are weak. Other exercises extend the material in the text or introduce new concepts not treated there. At the end of each chapter, a set of supplementary exercises is provided. Historical comments have been also added and enhanced to put the material in context. These are included at the end of each chapter. Chapters 3 and 4 have been rewritten so as to give the breadth-first search algorithm a more prominent role. Many examples in these chapters have been rewritten to be more useful to instructors who do not wish to discuss the details of the formal presentations of the algorithms. Each chapter ends with a set of computer projects related to its content, algorithmic or otherwise. These are purposely stated in general terms, so as to be appropriate to students using various computing systems and languages.