У меня есть DAG, сохраняющая связь между некоторыми объектами в моем приложении. Когда эта структура обновляется путем добавления новой вершины ниже существующей (т.е. Неявного создания нового ребра в новую вершину), а затем (в любое другое время) нового края оттуда к другим вершинам, я хочу убедиться, что график остается DAG, т.е. е. что мой код не создает циклы.
Должен ли я добавить обнаружение цикла для каждой операции вставки и подключения, или есть правила, которые я могу выполнить при вставке, что гарантирует что я не производю циклы?
Один из подходов, который я могу придумать, - сохранить топологический уровень каждого node и разрешить только новые ребра, указывающие на более высокие уровни (дальше от исходных узлов). Однако кажется, что это фактически лишит меня большой гибкости, которую я надеялся достичь, используя DAG вместо набора обычных деревьев.