10.1.4. Алгоритм перебора в глубину
 
Для полноты изложения следует упомянуть и четвертый метод поиска на графе, известный как метод перебора в глубину. Это название объясняется тем, что метод применяется, когда граф является деревом. Вместо того чтобы прослеживать все варианты одновременно на одну и ту же глубину, в методе перебора в глубину исследуется сначала один путь до конца, затем другой и т. д. В нашем примере поездки по городам алгоритм перебора в глубину мог бы перейти от Сан-Франциско к Портленду, затем к Сиэтлу, Спокану, Рено и попасть снова в Сан-Франциско. Обнаружив этот цикл, алгоритм вернулся бы к Рено и исследовал другие пути, если они существуют. Затем точно так же были бы исследованы различные пути из Спокана. 
1. Поместить все узлы множества  в список ОТКРЫТ в произвольном порядке.
 в список ОТКРЫТ в произвольном порядке. 
2. Если список ОТКРЫТ пуст, решения нет. 
3. Закрыть первый узел в ОТКРЫТ. Если это целевой узел, задача решена. 
4. Поместить преемники только что закрытого узла в список ОТКРЫТ перед узлами, уже содержащимися в этом списке. Если какой-то узел из множества преемников уже есть в списке ОТКРЫТ, то аннулировать все записи его в этом списке, кроме последней. Если какой-то узел из множества преемников находится в списке ЗАКРЫТ, тов список ОТКРЫТ его не помещать. 
5. Перейти к шагу 2. 
 
Алгоритм перебора в глубину может привести к бесконечному поиску, если граф не конечен. В качестве примера рассмотрим граф, изображенный на рис. 10.2. Пусть цель задачи — найти путь от  Возможная последовательность состояний, которую дает метод перебора в глубину, такова:
 Возможная последовательность состояний, которую дает метод перебора в глубину, такова: 
 
Этот путь никогда не заканчивается и не содержит пути, ведущего к цели. Обычно, чтобы избежать таких ситуаций, при реализации алгоритма в него включают дополнительный шаг (За), согласно которому преемники узла не следует помещать в список ОТКРЫТ, если узел закрывается на расстоянии не менее  от начального множества. Значение
 от начального множества. Значение  определяется отдельно для каждой задачи. Хотя этот шаг, несомненно, необходим во всех случаях, связанных с бесконечными графами, он лишает нас возможности общего анализа получаемой программы.
 определяется отдельно для каждой задачи. Хотя этот шаг, несомненно, необходим во всех случаях, связанных с бесконечными графами, он лишает нас возможности общего анализа получаемой программы. 
В общем случае решение, которое дает метод перебора в глубину, не является ни минимальным, ни наиболее выгодным. Чтобы понять это, рассмотрим снова задачу переезда из Сан-Франциско в Лое-Анд-желес (рис. 10.1) и применим алгоритм перебора в глубину, дополненный правилом, предписывающим помещать в список ОТКРЫТ преемники, начиная с самой северной ветви и двигаясь далее против часовой стрелки. Путь, найденный этим алгоритмом, идет из Сан-Франциско в Лос-Анджелес через Портленд, Сиэтл, Спокан, Рено и Лас-Вегас! Это вряд ли оптимальный путь. 
Учитывая такие недостатки алгоритма, естественно спросить, зачем его вообще нужно обсуждать. Ответ, в частности, таков: „По историческим причинам". Метод перебора в глубину очень легко программируется, поскольку список ОТКРЫТ можно подходящим образом упорядочить, заталкивая и выталкивая магазин (Кнут, 1969). Поэтому методы перебора в глубину привлекали тех, кто хотел получить хоть какой-нибудь результат. По крайней мере один автор признался в этом совершенно недвусмысленно (Слейгл, 1965). Возможна и другая, более тонкая причина. Людям легче реализовать метод перебора в глубину. При методе перебора в ширину в список ОТКРЫТ часто помещается очень много узлов. Это всегда требует некоторой схемы для фиксации связей между узлами. А при методе перебора в глубину в ОТКРЫТ обычно содержится меньше узлов и они связаны тем порядком, в котором записывались в этот список, а не явными указателями. В современных  
 
теориях человеческой памяти (Норман, 1969; Кинтш, 1970) обращается внимание на то, что люди располагают весьма ограниченным объемом памяти для оперативной информации и поэтому должны применять те стратегии решения задачи, которые не требуют одновременного запоминания многих фактов. Это, конечно, делает метод перебора в глубину более привлекательным. 
Довод, что метод перебора в глубину выглядит психологически более естественным, не является чисто теоретическим. Ньюэлл и Саймон (1965) заметили, что при игре в шахматы, которую можно сформулировать как задачу поиска на графе, очень хороший игрок пользуется модифицированным методом перебора в глубину. Мы провели ряд экспериментов, в которых испытуемым задавались в явном виде задачи поиска на графе и предлагалось решить их либо методом перебора в глубину, либо методом перебора в ширину. Испытуемые практически всегда справлялись с методом перебора в глубину, но затруднялись при выполнении даже очень простых заданий по методу перебора в ширину.