Пометьте каждый узел и составьте список ребер.То есть, для каждого узла храните узлы, к которым у него есть ребра, например:
{
"a": [ "b", "c", "d" ],
"b": [ "d" ],
"c": [ "d" ],
"d": [ ]
}
Таким способом вы можете хранить многие виды графиков, а не только DAG, поэтому вам потребуется постобработать егочтобы убедиться, что у него нет петель.Просто выберите узел, DFS, если вы видите какой-либо узел более одного раза, это не DAG.Затем удалите все узлы, которые вы только что видели, и повторите все оставшиеся узлы.Делайте это до тех пор, пока не найдете цикл или не удалили все узлы, в последнем случае граф является DAG.
Обратите внимание, что в нем не хранятся родительские узлы, поскольку это избыточная информация.Вы можете создать их после загрузки графика, если вам нужны эти данные.