A Universal Representation:
Vector of Integers

This approach works by "manually" implementing the polymorphism one needs by establishing a rule that all configurations will be represented by a single type, a vector of integers for example. The code specific to a certain problem being solved then interprets the contents of one of these objects in a unique way. The generic problem solver has no idea what the objects' contents describe. It just passes these vectors to objects that do and asks questions like, "Is this a goal?" and, "What configurations are neighbors of this one?"