опт_f( ДД, F1),

                расширить( П, д( В, F1/G, ДД), Предел, Дер1,

                                                                    ЕстьРеш, Реш);

            ЕстьРеш = никогда).                 % Нет преемников - тупик

        расширить( П, д( В, F/G, [Д | ДД]), Предел, Дер1,

                                                                  ЕстьРеш, Реш):-

                F <= Предел,

                опт_f( ДД, OF), мин( Предел, OF, Предел1),

                расширить( [В | П], Д, Предел1, Д1, ЕстьРеш1, Реш),

                продолжить( П, д( В, F/G, [Д1, ДД]), Предел, Дер1,

                                                            ЕстьРеш1, ЕстьРеш, Реш).

        расширить( _, д( _, _, [ ]), _, _, никогда, _ ) :-  !.

                                   % Тупиковое дерево - нет решений

        расширить( _, Дер, Предел, Дер, нет, _ ) :-

                f( Дер, F), F > Предел.           % Рост остановлен

        продолжить( _, _, _, _, да, да, Реш).

        продолжить( П, д( В, F/G, [Д1, ДД]), Предел, Дер1,

                                                           ЕстьРеш1, ЕстьРеш, Реш):-

                ( ЕстьРеш1 = нет, встав( Д1, ДД, НДД);

                  ЕстьРеш1 = никогда, НДД = ДД),

                опт_f( НДД, F1),

                расширить( П, д( В, F1/G, НДД), Предел, Дер1,

                                                                                ЕстьРеш, Реш).

        преемспис( _, [ ], [ ]).

        преемспис( G0, [В/С | ВВ], ДД) :-

                G is G0 + С,

                h( В, Н),                                   % Эвристика h(B)

                F is G + Н,

                преемспис( G0, ВВ, ДД1),

                встав( л( В, F/G), ДД1, ДД).

% Вставление дерева Д в список деревьев ДД с сохранением

% упорядоченности по f-оценкам

        встав( Д, ДД, [Д | ДД] ) :-

                f( Д, F), опт_f( ДД, F1),

                F =< F1,  !.

        встав( Д, [Д1 | ДД], [Д1 | ДД1] ) ) :-

                встав( Д, ДД, ДД1).

% Получение f-оценки

        f( л( _, F/_ ), F).                                             % f-оценка листа

        f( д( _, F/_, _ ) F).                                          % f-оценка дерева

        опт_f( [Д | _ ], F) :-

Вы читаете Prolog
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ОБРАНЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату