В отрывке книги, который вы перечислили, есть решение, которое вы ищете.
Во-первых, псевдокод, который вы перечислили, довольно сложен, если вы не знаете, что означают переменные. Первым я понял CS, который довольно стандартен для текущего состояния. Тогда я предполагаю, что DE - тупики, SL - текущее состояние до текущего узла, а NSL - все непроверенные ветви. После этого я просто использовал свое собственное понимание алгоритма возврата, которое я обычно реализую рекурсивно. В будущем, пожалуйста, постарайтесь использовать более описательные переменные при публикации общих вопросов.
В основном, когда вы добираетесь до узла ИЛИ, вы можете продолжить поиск с неизмененным алгоритмом обратного отслеживания, потому что, как только вы нажмете на один истинный узел, он вернется к исходному результату. Однако, когда вы достигнете узла AND, вы должны проверить всех потомков в этом месте и убедиться, что все они верны или их легче понять, как только один из потомков окажется ложным, вы можете вернуться назад.
В узлах ИЛИ вы предполагаете, что все ложны, пока не подтвердится хотя бы один раз. В узлах AND вы предполагаете, что все верно, пока не подтвердится хотя бы один раз.
Добавленная вами модификация должна быть помещена в предложение else исходного алгоритма. Вы знаете, что у него есть дочерние элементы, поэтому все, что вам нужно сделать, это заставить его проверить всех потомков, а не останавливаться на одном хорошем экземпляре для узлов AND. Упомянутая вами модификация - правильная идея, но она не соответствует тому, как написан оригинальный псевдокод. Алгоритм, который вы перечислили, не позволяет вызову «разрешить все дочерние элементы CS», потому что это будет рекурсивный вызов, и ваш алгоритм хочет прямой цикл. На той же ноте, если все дочерние элементы верны, добавление их в NSL также потребует рекурсии, потому что вы не знаете, насколько глубоко дерево находится за пределами текущего состояния и непосредственных дочерних элементов.
Я рекомендую переписать его как рекурсивное решение. Если это не вариант, ответ не выскакивает у меня.
Вот хорошее видео для просмотра , если у вас есть час.