Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何向空图添加随机边,直到它在python中连接起来?_Python_Connected Components - Fatal编程技术网

如何向空图添加随机边,直到它在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我想看看它选择了哪些随机节点..那个打印的东西只是让我看,没必要。我只需要向它添加随机边,直到它成为一个组件。非常感谢…你能告诉我我的错误是什么吗?很难说,因为它太不一样了。首先,您随机拾取两个顶点,这可能导致拾取相等的顶点创建循环或先前选择的边创建多重边。总的来说,这并不是错的,但你没有明确说明你的任务要求什么,