In this course you will learn how to recognize that nontrivial computational problems which need to be solved by algorithms and also to formalize them, model problems with binary relations as graph problems and solve them, using the fundamental graph algorithms, perform in simple cases the whole development cycle of algorithms: problem analysis, choosing, modifying and combining suitable techniques and data structures, analysis of correctness and complexity, filling in implementation details, looking for possible improvements, etc.