C++. Пентамино. Решатель головоломки

Пентамино. Интересная конечно головоломка. На днях столкнулся с подобной задачкой. Есть 9 фигурок, каждая из которых представлена во входном файлике, причем своеобразной формы. Ниже парочка изображений этих фигурок






 Также после нахождения решений в виде таких же рисунков, нужно каждую из фигурок как-то отделить визуально, обычно в классическом пентамино для этого квадратные фигуры разукрашивают в разные цвета. Но в нашем случае фигурки необычные :) На выходе должен быть выходной файл с приведенными решениями пентамино! Как быть? С чего начать? Какую выбрать тактику? На первый взгляд непонятно с какого угла подойти к вопросу. Но для себя определил пару критериев, которых попробую придерживаться.

1. Необходимо фигуры перевести в цвет. Номер фигуры определяет цвет в виде числа(числовой цвет, числовая идентификация)


2. Каждая фигура определяется матрично (2ух мерно) размера m*n. Матричный каркас
 
3. У фигуры есть форма, а значит должна быть возможность симметричных поворотов определенных для  данной фигуры. Объектно-ориентированный подход
 
4. Метод сортировки - обход ладьей по часовой стрелке около первой фигуры (ближайшие ячейки, точки сопряжения) с переопределением матричного каркаса (подгонка)
5. Решением для двух фигур считается такая сортировка, при которой площадь сопряжения поверхностей двух фигур максимальна

Вперед и с песней :)