Шаг 186.
Основы языка Haskell. Программное представление графов в языке Haskell: структуры смежности. Список рёбер (дуг). Ассоциативный список инцидентности

    На этом шаге мы рассмотрим формирование такого списка и перечислим функции для работы с ним.

    Опишем один из самых удобных способов представления графов на языке Haskell.

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

    Примеры ассоциативных списков инцидентности.


Рис.1. Ассоциативные списки инцидентности

    Приведём основные функции библиотеки для работы с графами, представленными в виде ассоциативных списков инцидентности:

  1. (pairLis key data graph) - построение графа из списка вершин key и списка списков смежных вершин data с помощью добавления к существующему графу graph;
  2. (reKey graph) - восстановление списка вершин графа graph из ассоциативного списка инцидентности;
  3. (reData graph) - восстановление списка списков смежных вершин графа graph из ассоциативного списка инцидентности;
  4. (assoc1 node graph) - построение списка вершин графа graph, содержащего вершины, смежные вершине node;
  5. (rAssoc lst graph) - поиск в графе graph одной из вершин, имеющей заданный список смежных вершин lst;
  6. (putAssoc1 key data graph) - изменение в графе graph списка вершин, смежных вершине key, на список data;
  7. (addArc x y graph) - добавление в граф graph дуги (x,y);
  8. (deleteNode x graph) - удаление вершины x из графа graph;
  9. (deleteArc x y graph) - удаление дуги (x,y) из графа graph;
  10. (walk graph) - построение списка, содержащего все вершины графа, заданного ассоциативным списком инцидентности graph;
  11. (neighb2 x graph) - построение списка всех "соседей" данной вершины x в графе graph, представленном в виде ассоциативного списка инцидентности.

    На следующем шаге мы рассмотрим пример использования перечисленных функций.




Предыдущий шаг Содержание Следующий шаг