This book aims to explain the basics of graph theory that are needed at an introductory level for students in computer or information sciences. To motivate students and to show that even these basic notions can be extremely useful, the book also aims to provide an introduction to the modern field of network science. Mathematics is often unnecessarily difficult for students, at times even intimidating. For this reason, explicit attention is paid in the first chapters to mathematical notations and proof techniques, emphasizing that the notations form the biggest obstacle, not the mathematical concepts themselves. This approach allows to gradually prepare students for using tools that are… necessary to put graph theory to work: complex networks. In the second part of the book the student learns about random networks, small worlds, the structure of the Internet and the Web, peer-to-peer systems, and social networks. Again, everything is discussed at an elementary level, but such that in the end students indeed have the feeling that they: 1.Have learned how to read and understand the basic mathematics related to graph theory. 2.Understand how basic graph theory can be applied to optimization problems such as routing in communication networks. 3.Know a bit more about this sometimes mystical field of small worlds and random networks. There is an accompanying web site www.distributed-systems.net/gtcn from where supplementary material can be obtained, including exercises, Mathematica notebooks, data for analyzing graphs, and generators for various complex networks.