Javascript 如何解开一张图?

Javascript 如何解开一张图?,javascript,algorithm,graph-theory,Javascript,Algorithm,Graph Theory,我有一个API,它向我发送以下源图的信息(您可以假设A、B和C有一个公共父级) 正如下面的JSON(忽略字符串和数字值,纯粹是代表性的;键的顺序是不确定的) 为了从json构建图形表示,我编写了一个函数,根据childOf属性提供的数据,给出每个节点发生的级别。结果是 [ ["a", "b", "c"], ["i", "d", "e"], ["g", "f"], ["h"] ] 虽然垂直方向正确,但不考虑源表示中节点从左到右的顺序。这有时会导致以下(混乱的)图

我有一个API,它向我发送以下源图的信息(您可以假设A、B和C有一个公共父级)

正如下面的JSON(忽略字符串和数字值,纯粹是代表性的;键的顺序是不确定的)

为了从json构建图形表示,我编写了一个函数,根据childOf属性提供的数据,给出每个节点发生的级别。结果是

[
    ["a", "b", "c"],
    ["i", "d", "e"],
    ["g", "f"],
    ["h"]
]
虽然垂直方向正确,但不考虑源表示中节点从左到右的顺序。这有时会导致以下(混乱的)图形(参见红色和蓝色边缘)

我如何从上述JSON格式的信息中获得一个解开的图形?(知道源表示总是解纠缠的,因此解纠缠的解决方案必须存在)


想法1:我对实施的一个想法是优先使用DFS。例如,如果DFS从A开始并达到G,则当它选择同级进入下一分支时,它应该优先考虑E,然后优先考虑C。

是否存在循环或始终是DAG?@Primusa始终是DAG跟进,似乎每个节点最多只指向一个其他节点?那么它也总是一棵树吗?(或森林)@Primusa No.一个节点可以有多个父节点(参见G)。一个节点也可以有多个子节点。要将子i添加到,只需将值为
{“childOf”:{“a”:“own”}
的键“i”添加到json。然而,即使有多个父项和子项,也可以保证源表示始终是解纠缠的,因此必须存在解纠缠的解决方案。解纠缠图是NP难问题。开始你的学习
[
    ["a", "b", "c"],
    ["i", "d", "e"],
    ["g", "f"],
    ["h"]
]