Чтение онлайн

на главную - закладки

Жанры

Неизвестно

Шрифт:

решить( Верш, Верш ---> и : Деревья) :-

Верш ---> и : Вершины, % Верш - И-вершина

решитьвсе( Вершины, Деревья).

% Решить все задачи-преемники

решитьвсе( [ ], [ ]).

решитьвсе( [Верш | Вершины], [Дер | Деревья]) :-

решить( Верш, Дер),

решитьвсе( Вершины, Деревья).

отобр( Дер) :- % Отобразить решающее дерево

отобр( Дер, 0), !. % с отступом 0

отобр( Верш ---> Дер, Н) :-

% Отобразить решающее дерево с отступом Н

write( Верш), write( '--->'),

H1 is H + 7,

отобр( Дер, H1), !.

отобр( и : [Д], Н) :-

% Отобразить И-список решающих деревьев

отобр( Д, Н).

отобр( и : [Д | ДД], Н) :-

% Отобразить И-список решающих деревьев

отобр( Д, Н),

tab( H),

отобр( и : ДД, Н), !.

отобр( Верш, Н) :-

write( Верш), nl.

Рис. 13. 8. Поиск в глубину для И / ИЛИ-графов. Эта программа может

зацикливаться. Процедура решить находит решающее дерево, а

процедура отобр показывает его пользователю. В процедуре отобр

предполагается, что на вывод вершины тратится только один символ.

Например, при поиске в И / ИЛИ-графе рис. 13.4 первое найденное решение задачи, соответствующей самой верхней вершине а, будет иметь следующее представление:

а ---> b ---> и : [d, c ---> h]

Три формы представления решающего дерева соответствуют трем предложениям отношения решить. Поэтому все, что нам нужно сделать для изменения нашей исходной программы решить, - это подправить каждое из этих трех предложений, просто добавив в каждое из них решающее дерево в качестве второго аргумента. Измененная программа показана на рис. 13.8. В нее также введена дополнительная процедура отобр для отображения решающих деревьев в текстовой форме. Например, решающее дерево рис. 13.4 будет отпечатано процедурой отобр

в следующем виде:

а ---> b ---> d

е ---> h

Программа рис. 13.8 все еще сохраняет склонность к вхождению в бесконечные циклы. Один из простых способов избежать бесконечных циклов - это следить за текущей глубиной поиска и не давать программе заходить за пределы некоторого ограничения по глубине. Это можно сделать, введя в отношение решить еще один аргумент:

решить( Верш, РешДер, МаксГлуб)

Как и раньше, вершиной Верш представлена решаемая задача, а РешДер– это решение этой задачи, имеющее глубину, не превосходящую МаксГлуб. МаксГлуб– это допустимая глубина поиска в графе. Если МаксГлуб = 0, то двигаться дальше запрещено, если же МаксГлуб > 0, то поиск распространяется на преемников вершины Верш, причем для них устанавливается меньший предел по глубине, равный МаксГлуб– 1. Это дополнение легко ввести в программу рис. 13.8. Например, второе предложение процедуры решить примет вид:

решить( Верш, Верш ---> Дер, МаксГлуб) :-

МаксГлуб > 0,

Верш ---> или : Вершины, % Верш - ИЛИ-вершина

принадлежит ( Верш1, Вершины),

% Выбор преемника Верш1 вершины Верш

Глуб1 is МаксГлуб - 1, % Новый предел по глубине

решить( Bepш1, Дер, Глуб1).

% Решить задачу-преемник с меньшим ограничением

Нашу процедуру

поиска в глубину с ограничением

можно также использовать для имитации

поиска в ширину

.

Идея состоит в следующем

: многократно повторять поиск в глубину каждый раз все с большим значением ограничения до тех пор, пока решение не будет найдено, То есть попробовать решить задачу с ограничением по глубине, равным 0, затем - с ограничением 1, затем - 2 и т.д. Получаем следующую программу:

имитация_в_ширину( Верш, РешДер) :-

проба_в_глубину( Верш, РешДер, 0).

% Проба поиска с возрастающим ограничением, начиная с 0

проба_в_глубину( Верш, РешДер, Глуб) :-

решить( Верш, РешДер, Глуб);

Глуб1 is Глуб + 1, % Новый предел по глубине

Поделиться:
Популярные книги

Датский король

Корнев Владимир Григорьевич
Проза:
историческая проза
5.00
рейтинг книги
Датский король

По ту сторону рассвета

Чигиринская Ольга Александровна
Фантастика:
фэнтези
7.17
рейтинг книги
По ту сторону рассвета

Наша навсегда

Зайцева Мария
2. Наша
Любовные романы:
современные любовные романы
эро литература
5.25
рейтинг книги
Наша навсегда

"Зарубежный детектив 2026-7". Компиляция. Книги 1-9

Адлер-Ольсен Юсси
Зарубежный детектив
Детективы:
триллеры
классические детективы
криминальные детективы
полицейские детективы
крутой детектив
5.00
рейтинг книги
Зарубежный детектив 2026-7. Компиляция. Книги 1-9

Три Рождества, которые мы провели вдали от дома

Джексон Руби
Проза:
современная проза
5.00
рейтинг книги
Три Рождества, которые мы провели вдали от дома

Загадки истории. Факты. Открытия. Люди

Ермановская Анна Эдуардовна
Научно-образовательная:
история
7.00
рейтинг книги
Загадки истории. Факты. Открытия. Люди

Собрание юмористических рассказов в одном томе

Чехов Антон Павлович
Проза:
русская классическая проза
5.00
рейтинг книги
Собрание юмористических рассказов в одном томе

Экскалибур

Корнуэлл Бернард
3. Хроники Артура
Приключения:
исторические приключения
7.00
рейтинг книги
Экскалибур

Далекие королевства

Банч Кристофер
1. Далекие Королевства
Фантастика:
фэнтези
7.75
рейтинг книги
Далекие королевства

«О» - значит омут

Графтон Сью
Кинси Милхоун
Детективы:
крутой детектив
5.00
рейтинг книги
«О» - значит омут

Боевой кузнец. Дилогия

Аверьянов Евгений
Древние механизмы
Фантастика:
рпг
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Боевой кузнец. Дилогия

Невидимые академики / Unseen Academicals

Пратчетт Терри
Фантастика:
юмористическая фантастика
ужасы и мистика
фэнтези
6.88
рейтинг книги
Невидимые академики / Unseen Academicals

StarCraft: сборник рассказов

Нильсон Микки
StarCraft
Фантастика:
боевая фантастика
5.00
рейтинг книги
StarCraft: сборник рассказов

Сказки народов Америки

Ващенко Александр Владимирович
Детские:
сказки
5.00
рейтинг книги
Сказки народов Америки