Обычно для представления базового неориентированного графа в Lisp я могу создать список родительских узлов и их соответствующих дочерних узлов, как обсуждалось в этот вопрос (для удобства проиллюстрировано ниже).
этот граф дает список ребер:
(1 (2 6 7 8) 3 (4 (9 12)) 5 (10 11))
Это работает в случае дерева или любого другого неориентированного графа. Однако этот тип представления не работает, когда мы хотим представить ориентированный ациклический граф, в котором каждый узел может иметь несколько родителей:
Теперь у узла 8 есть несколько родителей (2, 3), но когда мы пытаемся представить это, мы теряем возможность определить, подключен ли узел 8 к двум родительским узлам или есть два узла 8:
(1 (2 6 7 8) (3 8) (4 (9 12)) (5 10 11))
В случае графа с уникальными узлами мы, конечно, можем сделать это предположение, но, насколько мне известно, группы DAG могут иметь повторяющиеся узлы ... так как же нам с этим справиться? Далее, как мы представим его в виде списка в Лиспе?