Тут нада чота умное напейсать! Шоб сказал, как отрезал! Но чота ничо не приходит вголову, сцуко (( :D
Алгаритм читать дальше//строим вглубь - стек LIFO, строим вширь стек FIFO заносим начальное состояние в ячейку и в базу а)извлекаем очередное состояние из стека в ячейку б) делаем ход проверяем, есть ли ходы в базе если есть, пишем только очередную ветку графа (петлю наверх) если нет, пишем и ветку и само состояние;состояние при этом отправляем в стек и так для всех вариантов хода после чего пункт а)
При первом ходе пишем его в буфер и разлочиваем Undo; Redo залочено, если нет, то залочиваем; Как только нажато Undo, запоминаем указатель буфера Undo во второй указатель (Redo) и разлочивается Redo; Undo работает до тех пор, пока счётчик сохранённого не обнулится. Как только обнуляется, лочим Undo; Redo работает до равенства второму указателю или пока не будет нажат ход.