节点的2集线器邻域中的节点具有零度?

时间:2014-06-18 12:38:48

标签: python algorithm graph networkx

我有一个networkxG,我使用此代码计算了距离特定节点2个集线器的节点:

def node_neighborhood(G, node, n=2):
    """
    Returns a list of nodes which are the n-neighborhood of the input node.

    Parameters
    ----------
    G: networkx graph object.
    node: the node to get the neighborhood for.
    n: the neighborhood degree.
    """
    path_lengths = nx.single_source_dijkstra_path_length(G, node)
    return [node for node, length in path_lengths.iteritems()
                    if length == n]

所以这段代码返回的节点是远离指定节点的2个集线器。

接下来,我使用以下代码从G中删除了node_neighborhood中不在返回列表中的所有节点:

            for n in G.nodes():
                if (n not in node_2_neiborhood) and (n != node):
                    G.remove_node(n)
                else:
                    if G.degree(n) == 0:
                        raise Exception("a node has zero degree!!!")

然而问题是节点具有零度的异常被抛出。我的问题是为什么?如果一个节点距离X是2个集线器,那么该节点必须至少有一个边缘!那么邻域中的节点如何可能具有零度?!

1 个答案:

答案 0 :(得分:0)

这种行为是如此正常和预期,因为采用这种方法我将删除距离目标节点1个集线器的节点。所以我正在删除2个集线器远离节点和目标节点之间的路径。