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

      Комментарии к записи Ответ в теме: Построить граф с использованием динамических структур данных. Обходы графа отключены
#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 списком, который там хранится.