Алгаритм
читать дальше//строим вглубь - стек LIFO, строим вширь стек FIFO
заносим начальное состояние в ячейку и в базу
а)извлекаем очередное состояние из стека в ячейку
б) делаем ход
проверяем, есть ли ходы в базе
если есть, пишем только очередную ветку графа (петлю наверх)
если нет, пишем и ветку и само состояние;состояние при этом отправляем в стек
и так для всех вариантов хода
после чего пункт а)
Алгаритм2
Изначально Undo & Redo залочены
Инициализация. Создаём кольцевой буфер.
//Init & Init3+загрузка сбрасываем буфер и лочим Undo & Redo;
При первом ходе пишем его в буфер и разлочиваем Undo; Redo залочено, если нет, то залочиваем;
Как только нажато Undo, запоминаем указатель буфера Undo во второй указатель (Redo) и разлочивается Redo;
Undo работает до тех пор, пока счётчик сохранённого не обнулится. Как только обнуляется, лочим Undo;
Redo работает до равенства второму указателю или пока не будет нажат ход.