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