Graph 如何将嵌套贴图转换为一组边
我有一个嵌套贴图中的图形,我想将其转换为一组带有节点ID、节点标签和边标签的边:Graph 如何将嵌套贴图转换为一组边,graph,clojure,Graph,Clojure,我有一个嵌套贴图中的图形,我想将其转换为一组带有节点ID、节点标签和边标签的边: #{{:edge/from 17592186325348 :edge/to 17592186325351 :edge/label :A2 :edge/from_node_label "a" :edge/to_node_label "l"}} 这里,我展示了在下面的数据结构中出现两次的edge a->l的所需格式。数据结构以源节点开始。儿童对其他目标进行编码:edge_label是从父对象到子对象的定向边的标
#{{:edge/from 17592186325348 :edge/to 17592186325351
:edge/label :A2
:edge/from_node_label "a" :edge/to_node_label "l"}}
这里,我展示了在下面的数据结构中出现两次的edge a->l的所需格式。数据结构以源节点开始。儿童对其他目标进行编码:edge_label是从父对象到子对象的定向边的标签
我猜递归解决方案最简单
{:db/id 17592186325353,
:predicate/children [{:db/id 17592186325357,
:predicate/children [{:db/id 17592186325348,
:predicate/children [{:db/id 17592186325351,
:predicate/children [],
:node_label "l",
:edge_label :A1}],
:node_label "a",
:edge_label :A2}],
:node_label "m",
:edge_label :A2}
{:db/id 17592186325348,
:predicate/children [{:db/id 17592186325351,
:predicate/children [],
:node_label "l",
:edge_label :A1}],
:node_label "a",
:edge_label :A1}],
:node_label "e"}
这是一个图表,因为在a处有一个循环。
然而,为了可视化的目的,我滥用了根状茎的视图树:
给出:
({:edge/from 17592186325353,
:edge/to 17592186325357,
:edge/from_node_labe "e",
:edge/to_node_label "m",
:edge/label :A2}
{:edge/from 17592186325353,
:edge/to 17592186325348,
:edge/from_node_labe "e",
:edge/to_node_label "a",
:edge/label :A1}
{:edge/from 17592186325357,
:edge/to 17592186325348,
:edge/from_node_labe "m",
:edge/to_node_label "a",
:edge/label :A2}
{:edge/from 17592186325348,
:edge/to 17592186325351,
:edge/from_node_labe "a",
:edge/to_node_label "l",
:edge/label :A1}
{:edge/from 17592186325348,
:edge/to 17592186325351,
:edge/from_node_labe "a",
:edge/to_node_label "l",
:edge/label :A1})
我不确定这是否是最简单的。a没有循环。从e到a有两条路径。而且结构看起来是多余的。是吗?:a下面的图表重复,使用相同的方法;边标签和:节点标签,但不同的是:db/ids,是的,我以一种糟糕的方式生成了这个图。您是对的,在这个数据结构中,边a->l出现了两次。如果我能得到一组边,那就最好了。我对这个问题增加了更多的描述。在我的想象中,我觉得宽度优先遍历将是一个接一个地处理边的最简单方法。但是,我不确定在没有队列的情况下是否能以更有效的方式进行。
({:edge/from 17592186325353,
:edge/to 17592186325357,
:edge/from_node_labe "e",
:edge/to_node_label "m",
:edge/label :A2}
{:edge/from 17592186325353,
:edge/to 17592186325348,
:edge/from_node_labe "e",
:edge/to_node_label "a",
:edge/label :A1}
{:edge/from 17592186325357,
:edge/to 17592186325348,
:edge/from_node_labe "m",
:edge/to_node_label "a",
:edge/label :A2}
{:edge/from 17592186325348,
:edge/to 17592186325351,
:edge/from_node_labe "a",
:edge/to_node_label "l",
:edge/label :A1}
{:edge/from 17592186325348,
:edge/to 17592186325351,
:edge/from_node_labe "a",
:edge/to_node_label "l",
:edge/label :A1})