gpt4 book ai didi

python - Networkx:通过波遍历图

转载 作者:行者123 更新时间:2023-12-01 00:59:16 26 4
gpt4 key购买 nike

假设我在networkx中有一个如下图

import networkx as nx

g = nx.Graph()
g.add_edge(0, 1)
g.add_edge(0, 2)
g.add_edge(3, 1)
g.add_edge(4, 2)

所以它基本上是 3-1-0-2-4 行。

是否有一种networkx方式通过“waves”执行BFS搜索?像这样的事情:

for x in nx.awesome_bfs_by_waves_from_networkx(g, 0):
print(x)
# should print
# [1, 2]
# [3, 4]

换句话说,我想找到所有 1 环邻域,然后是 2 环,等等。

我可以通过使用队列来做到这一点,但如果可能的话,我有兴趣使用networkx工具。也可以使用具有不同 深度限制 值的多个迭代器,但我希望可以找到更漂亮的方法。

UPD:对我来说,有一个不需要遍历整个图的惰性解决方案很重要,因为我的图可能很大,并且我希望能够在需要时尽早停止遍历。

最佳答案

您可以使用 Dijkstra 算法计算从 0(或任何其他节点 n)开始的最短路径,然后按距离对节点进行分组:

from itertools import groupby
n = 0
distances = nx.shortest_paths.single_source_dijkstra(g, n)[0]
{node: [node1 for (node1, d) in y] for node,y
in groupby(distances.items(),
key=lambda x: x[1])}
#{0: [0], 1: [1, 2], 2: [3, 4]}

如果您想按环(也称为结壳)继续进行,请使用邻域的概念:

core = set()
crust = {n} # The most inner ring
while crust:
core |= crust
# The next ring
crust = set.union(*(set(g.neighbors(i)) for i in crust)) - core

关于python - Networkx:通过波遍历图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55939790/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com