Ответ в теме: Построить граф с использованием динамических структур данных. Обходы графа

      Комментарии к записи Ответ в теме: Построить граф с использованием динамических структур данных. Обходы графа отключены
#1938

Описать тип данных узла графа можно следующим образом:

domains
list = integer*
el = pair(integer, list)
graph = el*

  • list — список целых чисел для хранения номеров узлов;
  • el — пара из номера текущего узла и списка смежных вершин;
  • graph — список пар (граф).

Добавление узла в граф сейчас выполняется точно также, как добавление узла в список:

Graph = [pair(1, [1,2,3]), pair(2, [3,4,5])],
GraphWithNode = [pair(3,[7,8])|Graph].

Первый список (Graph) содержит 2 пары, а список GraphWithNode — уже три пары.

Для каждой вершины в графе вы храните список смежных вершин, т.е. таких, в которые можно попасть из текущей. Найти такие вершины можно предикатом member. Пусть Graph — ваш граф, Source — текущая вершина, нужно получить DestinationList — список смежных вершин:
member((Source, DestinationList), Graph).
Правило найдет в графе вершину с номером Source и инициализирует переменную DestinationList списком, который там хранится.