Никто еще не упомянул ключевой фактор в тех случаях, когда поиск в ширину полезен: посещение узла одним способом может устранить необходимость посещения узла другим способом. В некоторых случаях в конечном итоге выполняется одна и та же работа, независимо от порядка посещения узлов, но BFS будет выполнять гораздо меньше ожидающих действий одновременно, чем DFS. В других случаях посещение узлов в одной последовательности может потребовать больше работы, чем в других; в качестве примера приводятся различные алгоритмы кратчайшего пути. Если посещение узла требует посещения его соседей, если не известно, что узел доступен для пути, который короче текущего, то посещение узлов в первом порядке обычно приводит к тому, что узлам назначается кратчайший путь - или что-то близкое к нему - -при их первом посещении. В отличие от этого, поиск в глубину может привести к тому, что многие узлы будут посещаться с очень длинными путями в первый раз, затем с более короткими путями, затем с чуть более короткими путями и т. Д., Что потребует поистине чудовищного общего объема работы.
Кстати, одна хорошая графическая иллюстрация различия между алгоритмами глубины и ширины - это заливка области, где белый узел заливается заливкой его черным цветом и заливкой соседей. Если кто-то пытается заполнить область квадрата NxN, начиная с корндерса, операция глубины сначала заполняет квадрат в спиральной или зигзагообразной последовательности, при этом операции NxN-1 остаются в стеке. Заполнение в ширину будет «выливаться» из начальной точки и будет иметь не более O (N) незавершенных операций независимо от формы, которую нужно заполнить. Кстати, заливка в IBM BASICA работала таким образом (я не уверен насчет QBASIC).