В основе самого алгоритма используется BFS, этим самым обеспечивается как корректность ответа, так и относительное быстродействие работы программы (как только правильный ответ нашли: программа завершается).
В качестве вершин графа используются состояния, каждое состояние состоит из расположения карт по кучкам (stacks) и счётчика ходов (move). Переходя из вершины в вершину мы переходим из состояния в состояние (ну и там уже проверяем, собралось ли 9 карт, соответствующих условию и т.д.)
Сам алгоритм, как и все структуры, находится в папке src в соответствующих папках