поднимаемся наверх, если для всех BlackReplies Код:
move->mark = 1;
Код:
this->mark = 1;
Тут, как мне кажется, лучше, как предлагалось, сначала перебрать все матовые позиции, а потом двигаться наверх до достижения исходной позиции. Отметки mark не нужны, если включать в дерево (на самом деле этот ациклический ориентированный граф может и не быть деревом) только позиции, безусловно выигрышные для белых и проигрышные для чёрных.
Позиция считается выигрышной для белых, если из неё существует хотя бы один ход в позицию, проигрышную для чёрных, в частности, к мату чёрным, соответственно, позиция считается проигрышной для чёрных, если все ходы из неё ведут в позицию, выигрышную для белых.
Для каждой позиции, выигрышной для белых, следует указать наилучший ход - любой из числа ведущих в позицию, проигрышную для чёрных, предыдущего ранга(если назвать рангом позиции число ходов от неё до мата).
Кроме того, идея о хешировании ходов выглядит весьма полезной - если при движении по графу вверх мы встретим позицию, уже рассматривавшуюся ранее, её можно пропустить (если не пропускать, мы никогда не закончим обход).
Ну и в конце концов не будет лишним удалить из получившегося графа все вершины, не являющиеся потомками исходной позиции.