Python 计算具有指定距离或更小距离的节点数

Python 计算具有指定距离或更小距离的节点数,python,graph,networkx,Python,Graph,Networkx,我将计算距离种子r或更小的节点数N(r) 假设我们有以下简单图: bfs_继任者从源代码返回广度优先搜索中的继任者词典 print nx.bfs_successors(G,'b') {'a': ['c'], 'c': ['g', 'f'], 'b': ['a', 'e', 'd'], 'e': ['h']} 我不知道如何用它来计算N(r)? 我需要这样的东西: seed='b' r=1, 'a','e','d' , N = 3 -----------------

我将计算距离种子
r
或更小的节点数
N(r)

假设我们有以下简单图:

bfs_继任者
从源代码返回广度优先搜索中的继任者词典

print nx.bfs_successors(G,'b')
{'a': ['c'], 'c': ['g', 'f'], 'b': ['a', 'e', 'd'], 'e': ['h']} 
我不知道如何用它来计算N(r)? 我需要这样的东西:

seed='b'
r=1,           'a','e','d'     , N = 3
-----------------------------------
r<=2,          'a','c'         , N = 5
               'e','h'    
               'd',
-----------------------------------
r<=3,          'a','c','f','g' , N = 7
               'e', 'h',
               'd'
seed='b'
r=1,'a','e','d',N=3
-----------------------------------

你可以用它做你想做的事。从文档中:

返回以节点n为中心的邻域的诱导子图 给定半径

从这个子图中,您可以像在任何其他图中一样获得节点

下面是一个基于您的代码的示例。它打印距离节点
b
2(或更小)处的所有节点

import networkx as nx

G = nx.Graph()
G.add_nodes_from(['a','b','c','d','e','f','g','h'])
G.add_edges_from([('a','b'),('a','c'),('b','d'),('b','e'),
                  ('e','h'),('c','f'),('c','g')])

ego = nx.ego_graph(G, 'b', radius=2, center=False)
print(ego.nodes())
输出:

['d', 'c', 'h', 'a', 'e']

你可以用它做你想做的事。从文档中:

返回以节点n为中心的邻域的诱导子图 给定半径

从这个子图中,您可以像在任何其他图中一样获得节点

下面是一个基于您的代码的示例。它打印距离节点
b
2(或更小)处的所有节点

import networkx as nx

G = nx.Graph()
G.add_nodes_from(['a','b','c','d','e','f','g','h'])
G.add_edges_from([('a','b'),('a','c'),('b','d'),('b','e'),
                  ('e','h'),('c','f'),('c','g')])

ego = nx.ego_graph(G, 'b', radius=2, center=False)
print(ego.nodes())
输出:

['d', 'c', 'h', 'a', 'e']

我错过什么了吗?没有边重什么的?你们为什么不选择像广度优先搜索或Dijkstra这样的简单方法呢?并没有权重。我已经用过“bfs”了。我是不是遗漏了什么?没有边重什么的?你们为什么不选择像广度优先搜索或Dijkstra这样的简单方法呢?并没有权重。我已经用过bfs了。