作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这种具有多个根的有向无环图:
我需要得到一个列表,其中包含按方向排序并按步骤分组的节点,如下所示:
ordering = [
[1, 3],
[2],
[4],
[5, 6],
[7]
]
networkx.algorithm
但他们都只能返回一个没有按步骤分组的平面列表。
最佳答案
nx.topological_sort
几乎做你想做的;唯一的区别是它不会对同时进入队列的项目进行分组,但可以直接适应 the source让它这样做:
def topological_sort_grouped(G):
indegree_map = {v: d for v, d in G.in_degree() if d > 0}
zero_indegree = [v for v, d in G.in_degree() if d == 0]
while zero_indegree:
yield zero_indegree
new_zero_indegree = []
for v in zero_indegree:
for _, child in G.edges(v):
indegree_map[child] -= 1
if not indegree_map[child]:
new_zero_indegree.append(child)
zero_indegree = new_zero_indegree
In [21]: list(nx.topological_sort(G))
Out[21]: [3, 1, 2, 4, 6, 7, 5]
In [22]: list(topological_sort_grouped(G))
Out[22]: [[1, 3], [2], [4], [5, 6], [7]]
nx.topological_sort
更有用的情况。 (或
nx.lexicographical_topological_sort
)直接?
关于python - 有向图并行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56802797/
为了获得我的瓷砖,我这样做: style(styleUri = Style.MAPBOX_STREETS) { +vectorSource(id = "parcel-source") {
我是一名优秀的程序员,十分优秀!