首页 > 解决方案 > 为什么我的图不是二分的,以为我使用相应的 networkx 函数将它们创建为二分的?

问题描述

我写了一个函数:

B = nx.Graph()
B.add_nodes_from([1, 2, 3, 4], bipartite=0)
B.add_nodes_from(["a", "b", "c"], bipartite=1)
B.add_edges_from([(1, "a"), (1, "b"), (2, "b"), (2, "c"), (3, "c"), (4, "a"), (1,2)])
layout = nx.bipartite_layout(B, [1, 2, 3, 4])
nx.draw_networkx(B, pos=layout)

如您所见,此图必须是二分图,但是我得到了:

在此处输入图像描述

1 和 2 已连接。所以,如果我可以使用 this 在它们之间添加边B.add_edges_from([(1, "a"), (1, "b"), (2, "b"), (2, "c"), (3, "c"), (4, "a"), (1,2)]),那么拧这个有什么意义:B.add_nodes_from([1, 2, 3, 4], bipartite=0)并指定它的二分?

标签: pythonpython-3.xgraphnetworkx

解决方案


您已为节点分配了属性bipartite=01. 但是,这只是节点的一个属性。您可以为它们分配您想要的任何属性,任何名称(颜色、重量、物种名称等)——它对存在的边缘没有影响。特别是,没有特别注意属性的名称。您已经命名了一个属性'bipartite',但就 networkx 命令而言,您可以很容易地命名该属性'fubar'。它不在乎。

您在节点 1 和 2 之间添加了一条边。Networkx 不会查看图形的属性并选择拒绝允许您要求它创建的边。

在您的情况下,我认为您的问题的答案是设置名为'bipartite'.


推荐阅读