如何向空图添加随机边,直到它在python中连接起来?
我是编程新手,我正在尝试解决一个问题,即找到一个空无向图需要连接的平均边数…它还要求跟踪沿途的孤立组件 我可以添加节点:如何向空图添加随机边,直到它在python中连接起来?,python,connected-components,Python,Connected Components,我是编程新手,我正在尝试解决一个问题,即找到一个空无向图需要连接的平均边数…它还要求跟踪沿途的孤立组件 我可以添加节点: from random import random, choice import networkx as nx G = nx.Graph() i = int(input("enter the number of desired nodes : ")) for node in range(0, i): G.add_node(i) # creates a graph
from random import random, choice
import networkx as nx
G = nx.Graph()
i = int(input("enter the number of desired nodes : "))
for node in range(0, i):
G.add_node(i) # creates a graph with desired number of nodes
i = i - 1
输出像10 9。。。1.
然后,我尝试选择两个随机节点,并用一条边将它们连接起来,如下所示:
first_node = choice(G.nodes())
second_node = choice(G.nodes())
print(first_node, second_node) # print which nodes are selected
但它不起作用……有什么想法吗?您需要更具体地说明您试图完成的模拟类型,因为图形生成有不同的随机过程。让我知道更具体,我可以编辑答案 作为示例,下面的代码生成一个具有N个顶点的图,并在不重复的情况下迭代添加随机边。当结果图形连接时,进程停止,并返回连接所需的边数
from itertools import combinations
from random import choice
def simulate(n):
G = nx.Graph()
G.add_nodes_from(range(n))
E = list(combinations(range(n), 2))
while True:
e = choice(E)
E.remove(e)
G.add_edge(e[0], e[1])
if nx.is_connected(G):
return G.size()
In [24]: L = [simulate(20) for _ in range(1000)]
In [25]: sum(L)/len(L)
Out[25]: 32.739
从这里我们可以看到,平均来说,我们需要向一个有20个顶点的图中添加32条随机边,这样它才能连接起来
from itertools import combinations
from random import choice
def simulate(n):
G = nx.Graph()
G.add_nodes_from(range(n))
E = list(combinations(range(n), 2))
while True:
e = choice(E)
E.remove(e)
G.add_edge(e[0], e[1])
if nx.is_connected(G):
return G.size()
In [24]: L = [simulate(20) for _ in range(1000)]
In [25]: sum(L)/len(L)
Out[25]: 32.739
那么,到底是什么不起作用呢?它不是在选择节点吗?顺便问一下,我会使用G.add_nodenode而不是for循环中的I操作。你到底在哪里连接节点?看起来更像是在打印两个随机整数。@RonaldEvers。是的,它不选择节点…我希望用户插入节点数,因为问题要求的是使图形具有n=100200,…,1000个节点的平均边数connected@Jernej我想看看它选择了哪些随机节点..那个打印的东西只是让我看,没必要。我只需要向它添加随机边,直到它成为一个组件。非常感谢…你能告诉我我的错误是什么吗?很难说,因为它太不一样了。首先,您随机拾取两个顶点,这可能导致拾取相等的顶点创建循环或先前选择的边创建多重边。总的来说,这并不是错的,但你没有明确说明你的任务要求什么,