This introduction to most of the classical concepts of pure and applied graph theory covers many of the major classical theorems. The emphasis is on algorithms and their complexity--what graph problems have known efficient solutions and which are intractable.