Пошук у ширину

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук
Порядок обходу вершин.
Ілюстрація пошуку у ширину. Чорні вершини пройдено, сірі чекають у черзі

По́шук у ширину́ — алгоритм пошуку на графі.[1]

Якщо задано граф G = (VE) та початкову вершину s, алгоритм пошуку в ширину систематично обходить всі досяжні із s вершини. На першому кроці вершина s позначається, як пройдена, а в список додаються всі вершини, досяжні з s без відвідування проміжних вершин. На кожному наступному кроці всі поточні вершини списку відмічаються, як пройдені, а новий список формується із вершин, котрі є ще не пройденими сусідами поточних вершин списку. Для реалізації списку вершин найчастіше використовується черга. Виконання алгоритму продовжується до досягнення шуканої вершини або до того часу, коли на певному кроці в список не включається жодна вершина. Другий випадок означає, що всі вершини, доступні з початкової, уже відмічені, як пройдені, а шлях до цільової вершини не знайдений.

Алгоритм має назву пошуку в ширину, оскільки «фронт» пошуку (між пройденими та непройденими вершинами) одноманітно розширюється вздовж всієї своєї ширини. Тобто, алгоритм проходить всі вершини на відстані k перед тим як пройти вершини на відстані k+1.[1]

Алгоритм[ред.ред. код]

Наведемо кроки алгоритму

  1. Почати з довільної вершини v. Виконати BFS(v):=1. Включити вершину v у чергу.
  2. Розглянути вершину, яка перебуває на початку черги; нехай це буде вершина х. Якщо для всіх вершин, суміжних із вершиною х, уже визначено BFS-номери, то перйти до кроку 4, інакше - до кроку 3.
  3. Нехай {x,y} - ребро, у якому номер BFS(у) не визначено. Позначити це ребро потовщеною суцільною лінією, визначити BFS(у) як черговий BFS-номер, включити вершину у у чергу й перейти до кроку 2.
  4. Виключити вершину х зі черги. Якщо черга порожня, то зупинитись, інакше - перейти до кроку 2.

Джерела інформації[ред.ред. код]

  1. а б Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein (2001). «22.2». Introduction to Algorithms (англ. ) (вид. 2-ге). MIT Press. с. 531. ISBN 0-262-03293-7. 

Див. також[ред.ред. код]