How to assign “levels” to vertices of an acyclic directed graph?

点点圈 提交于 2019-12-01 00:56:01

I think letting the level of v be the length of the longest directed path from v might work well for you. In Python:

# the level of v is the length of the longest directed path from v
def assignlevel(graph, v, level):
    if v not in level:
        if v not in graph or not graph[v]:
            level[v] = 0
        else:
            level[v] = max(assignlevel(graph, w, level) + 1 for w in graph[v])
    return level[v]

g = {'a': ['b', 'c'], 'b': ['d'], 'd': ['e'], 'c': ['e']}
l = {}
for v in g:
    assignlevel(g, v, l)
print l

Output:

{'a': 3, 'c': 1, 'b': 2, 'e': 0, 'd': 1}

You could use a topological sort to assign a unique number to each vertex with the property that you want Similarly you could go through the nodes in topological order and assign max(parents) + 1

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!