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

时间:2017-06-18 09:22:07

标签: python graph networkx

我将从种子计算距离N(r)或更少的节点r的数量。

假设我们有以下简单的图表:

enter image description here

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')])

bfs_successors从源头返回广度优先搜索中的后继词典。

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'

感谢您的任何评论或指导。

1 个答案:

答案 0 :(得分:3)

您可以使用ego_graph执行所需操作。来自文档:

  

返回以节点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']