Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекція_4_9_графи.doc
Скачиваний:
2
Добавлен:
23.11.2019
Размер:
226.82 Кб
Скачать

Incident(а, в, g):-

member-В, G);

member(В-А, G).

top(А, Tree) :- % А належить графу, якщо

incident(А,_, G). % А суміжна деякій вершині

Постановка 12.

Програму побудови остовного дерева можна написати зовсім іншим, повністю декларативним способом, лише формулюючи на Прологу деякі математичні визначення. Нехай, так само, як і попередньо, і графи, і дерева задані списками своїх ребер.

Використаємо наступні визначення:

(1) Т є остовним деревом графа G, якщо:

  • Т - це підмножина графа G і

  • Т - дерево і

  • Т "накриває" (covers) G, тобто кожна вершина з G також є у Т.

(2) Множина ребер Т є дерево, якщо

  • Т - зв'язний граф і

  • Т не містить циклів.

Ці визначення можна сформулювати на Прологу з використанням попередньої програми path(A, Z, G, Р).

% Побудова остовного дерева

% Графи й дерева представлені списками ребер.

tree_column(G, Tree):- subset(G, Tree),

tree(Tree), covers(Tree, G).

subset([ ], [ ]).

subset([Х | L], [Х | L1]) :- subset(L, L1).

tree(Tree):- connect(Tree),not(cycle(Tree)).

connect(Tree):-not(top(А, Tree), top(В, Tree),

not(path(А, В, Tree, _ ))).

top(А, G) :- incident(А,_, G).

cycle(Tree):-

Incident(а, в, Tree),

path(А,B,Tree,[А,X |_]). % Довжина шляху>1

path( A, Z, G, Р) :- path1( А, [Z], G, Р).

path1( А, [А | Р1], _, [А | Р1] ).

path1( А, [Y | Р1], G, Р) :- incident( X, Y, G),

not(member(X, Р1)), % Умова відсутності циклу

path1( А, [ X, Y | Р1], G, Р).

Incident(X, y, g(V, e)):- member(edge(X, y), e);

member(edge(Y, X), E).

covers(Tree, G) :-not(top(А, G), not(top(А, Tree))).

member(A,[A|_]):-!.

member(A,[_|T]):-member(A,T).

Зауважимо, що ця програма не має практичного інтересу через свою неефективність.

Самостійна робота.

  1. Розгляньте використання наведених рішень задач на конкретних прикладах графів.

  2. Розгляньте остовні дерева у випадку, коли кожному ребру графа приписана його вартість. Нехай вартість остовного дерева визначена, як сума вартостей складових його ребер. Напишіть програми:

    1. визначення для заданого графа вартості його остовного дерева;

    2. побудови для заданого графа його остовного дерева мінімальної вартості.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]