(s.Move'='e.State) где знак равенства вставлен просто для удобочитаемости. Чтобы подогнать начальное состояние под этот формат, будем рассматривать его как следующее из фиктивного предшествующего перемещения со специальным кодом . Дерево состояний начинается следующим образом:
(0 = Sinit)(1 = S1)(1 = S11)... (2 = S12)... ... (5 = S15)... (2 = S2)(1 = S21)... (2 = S22)... ... Примем в качестве метода поиска по дереву метод "внутри-слева" и простой фиксированный порядок опробования перемещений: 1, 2, и т.д. до 5. Тогда на самом деле нет надобности работать со всей структурой дерева. Можно хранить только одну цепочку связей, которая образует путь из корня в текущий узел.
Назовем поисковую функцию Search . Она вызывается в начале программы с начальной цепочкой в качестве аргумента: