Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Обход (поиск) в ширину

Читайте также:
  1. D. осознанная необходимость.
  2. I. НЕОБХОДИМОСТЬ МОЛОДЕЖНОГО СЛУЖЕНИЯ В ЦЕРКВИ
  3. II. При использовании такого материала необходимо различать грехи, отталкивающие по самой своей природе, и грехи, которые зачастую могут выглядеть привлекательными.
  4. Quot;Ни в каких периодах нашей духовной жизни мы не можем обходиться без помощи той силы, которая помогла нам положить
  5. А теперь о трупах, или – необходимость мумий.
  6. А. Обходной путь делать прямым
  7. Актуальность проекта. Обоснование необходимости проекта. Выбор и изучение проблемы

Обход графа в ширину (breadth first search, BFS) основывается на замене стека очередью:

1. Добавляет начальную вершину в очередь и помечает её как использованную.

2. Извлекает следующую вершину из очереди и добавляет в очередь смежные ей неиспользованные вершины, помечая их как использованные.

3. Если очередь не пуста, переходит к пункту 2.

После такой модификации чем раньше посещается вершина (помещается в очередь), тем раньше она используется (удаляется из очереди). Использование вершины происходит с помощью просмотра сразу всех еще не просмотренных вершин, смежных этой вершины. Таким образом, "поиск ведется как бы во всех возможных направлениях одновременно".[4]

Очередность просмотра вершин при поиске в ширину:

Пример:

Порядок включения вершин при использовании метода поиска в ширину: v1, v2, v3, v4, v7, v8, v6, v5,v9.

Писать поиск в ширину, как и большинство других алгоритмов, лучше для графа, заданного списком рёбер. В этом случае алгоритм более мобилен (это важно при модификациях) и даёт оптимальное время работы.

procedure bfs(v:integer);

var Og:array[1..nn]of integer;

yk1,yk2:integer;

i:integer;

Begin

// в элементе og[i] хранится номер группы вершины i. Изначально номер группы всех вершин кроме стартовой равен 0, это значит, что они ещё не были использованы.

for i:=1 to n do

og[i]:=0;

// Инициализация очереди, т.е. добавление в неё начальной вершины с номером v

yk2:=0;

yk1:=1;

Og[yk1]:=v;

used[v]:=true; // пометка вершины использованной

while yk2 < yk1 do // цикл работает, пока очередь не пуста

Begin

inc(yk2);v:=Og[yk2];

write(v:2);

// просматриваются все рёбра, исходящие из первой вершины очереди

for i:=1 to n do

// использована ли вершина, в которую ведёт выбранное ребро, если нет, то вершина добавляется в очередь

if (a[v,i] <> 0) and not used[i] then

Begin

// сдвигается указатель конца очереди


Дата добавления: 2015-10-13; просмотров: 96 | Нарушение авторских прав


Читайте в этой же книге: Способы представления графов в памяти | Матрица смежности | Списки смежности | Топологическая сортировка | Каркас. Алгоритм Прима | Программа поиска всевозможных путей в графе | Программа поиска минимального пути в графе между заданными вершинами |
<== предыдущая страница | следующая страница ==>
Просмотр графа| Задача нахождения кратчайшего пути. Алгоритм Дейкстры

mybiblioteka.su - 2015-2024 год. (0.006 сек.)