Розділ IV. АЛГОРИТМИ
гарного розв'язку достатньо знайти шлях, що задовольняє набір об- межень; при цьому неважливо, чи є ще кращий розв'язок.
Методи пошуку, описані далі, не в усіх ситуаціях працюють одна- ково ефективно. Тому важко сказати, чи завжди один метод кращий за інший. Проте в середньому деякі методи будуть прийнятнішими ніж інші. Іноді сама постановка задачі підказує кращий метод.
4.6.3.ПОШУК У ШИРИНУ
Єодним із базових алгоритмів пошуку. Нехай задано граф G = (V ,E )
іфіксовану початкову вершину s . Алгоритм пошуку в ширину перера- ховує всі досяжні із s вершини в порядку зростання відстані від s . Ві- дстанню вважається довжина найкоротшого шляху (кількість ребер чи сума вагових коефіцієнтів для зваженого графа). Під час пошуку шляху
вграфі виділяється дерево пошуку в ширину з коренем s . Воно містить
усі досяжні із s вершини й тільки їх. Алгоритм може застосовуватись як для орієнтованих, так і для неорієнтованих графів.
Назва пояснюється тим, що в процесі пошуку ми йдемо в ширину, а не в глибину (спочатку переглядаємо сусідні вершини, потім їхніх сусідів і т. д.). Для наочності поділятимемо вершини графа на білі, сірі й чорні. Спочатку вони всі білі, а в процесі роботи алгоритму біла вершина може стати сірою, сіра – чорною, але не навпаки. Зустрівши нову вершину, алгоритм пошуку фарбує її в сірий чи чорний відпові-
дно до правила: якщо (u,v ) E та u – чорна, то v – чорна або сіра.
Різниця між сірими й чорними вершинами використовується алгори- тмом для керування порядком обходу: сірі вершини – це ті, по яких ще потрібно рухатися, а всі сусіди чорних уже переглянуті. Отже, тільки сірі вершини можуть мати суміжні невиявлені вершини. Спо- чатку дерево пошуку складається тільки з початкової вершини s . При виявленні алгоритмом нової вершини v , суміжної з раніше знай-
деною вершиною u , вершина v разом із ребром (u,v ) додається до
дерева пошуку, стаючи нащадком вершини u , а u стає батьком v . Дерево пошуку в ширину зручно зберігати в черзі (див. вправу 16, б). Кожна вершина знаходиться тільки один раз, тому двох батьків у неї бути не може. Оцінюючи складність цього алгоритму, зауважимо, що вершини тільки темніють. Час обходу суміжних вершин до даної ве-
ршини становить O(E ), де E – кількість ребер, а обчислювальна