## Summary

So far, we have covered graphs in fairly comprehensive detail. You should now have a solid understanding of some of the basic uses of graph theory in software development, as well as an appreciation for how graph-based solutions can be used to encapsulate complex data in a way that allows us to query and manipulate it with relative ease. Having learned the fundamentals of graph structures and traversals in *Chapter 6*, *Graph Algorithms I*, and then extended them to solve more advanced problems in this chapter, you should now be well-equipped to explore much deeper graph implementations in the future since these basic concepts are at the core of all of them.

Though this chapter does not completely conclude our discussion of graph algorithms for this book, we will now take a break from graphs to explore one of the most powerful and challenging programming techniques in the modern developer's repertoire. Like graph algorithms, the subject we will cover next is so expansive and conceptually...