当前位置 博文首页 > 在python中如何从有向无环图中找到边层次图_夏日快乐的博客:pyt

    在python中如何从有向无环图中找到边层次图_夏日快乐的博客:pyt

    作者:[db:作者] 时间:2021-09-05 19:15

    你需要构造一个图,其中原始图中节点之间的边作为节点,而原始图中的节点作为边,正如我所理解的那样。在这种情况下,post中的图形是不正确的。例如:您有一个节点be,它是ae的继承者,但是在原始图中它不是真的,ae和{}是并行的。我构建了一个代码来解决这个问题:import networkx as nx

    import random

    from itertools import groupby

    # Create a random DAG

    G = nx.gnp_random_graph(10,0.3,directed=True)

    DAG = nx.DiGraph([(u,v) for (u,v) in G.edges() if u

    res = nx.DiGraph()

    # Create nodes in new DAG as edges in original DAG

    res.add_nodes_from(list(DAG.edges()))

    sorted_res_nodes = sorted(res.nodes, key=lambda x: x[1])

    # Connect all nodes with end of node1 is equal to start of node2

    for n1 in sorted_res_nodes:

    for n2 in sorted_res_nodes:

    if n1[1] == n2[0]:

    res.add_edge(n1, n2)

    # Draw graphs

    nx.draw(

    DAG,

    with_labels=True,

    pos=nx.drawing.nx_agraph.graphviz_layout(

    DAG, prog='dot'

    )

    )

    nx.draw(

    res,

    with_labels=True,

    pos=nx.drawing.nx_agraph.graphviz_layout(

    res, prog='dot'

    )

    )

    对于此图:

    50485a7a50e20a1641ae7762c46ca821.png

    将构建新图形:

    c23449413a2ba0f1fbe5394ed89309fd.png

    请注意,原始DAG中根的所有边都将转换为新DAG中的根。还请注意,对于每个边,开始节点的末端等于结束节点的起点。在

    cs