Graph 如何在m个节点之间生成n条边

Graph 如何在m个节点之间生成n条边,graph,nodes,edges,Graph,Nodes,Edges,我在概念化我的问题上有困难。但本质上,如果我有m个节点,并且希望为每个节点生成不超过n个连接。我还想确保从每个节点到任何其他节点都有一条路径。我不在乎周期 我没有合适的词汇来发现这个问题已经存在,尽管我确信它一定存在于某个地方 有人知道这个问题的解释地点吗,或者知道答案吗?最简单的方法是构造一个生成树,确保所有节点都是连接的,然后添加不违反每个节点的最大边数的边,直到达到目标边数为止。在伪代码中: // nodes[] is a list of all m nodes in our graph

我在概念化我的问题上有困难。但本质上,如果我有m个节点,并且希望为每个节点生成不超过n个连接。我还想确保从每个节点到任何其他节点都有一条路径。我不在乎周期

我没有合适的词汇来发现这个问题已经存在,尽管我确信它一定存在于某个地方


有人知道这个问题的解释地点吗,或者知道答案吗?

最简单的方法是构造一个生成树,确保所有节点都是连接的,然后添加不违反每个节点的最大边数的边,直到达到目标边数为止。在伪代码中:

// nodes[] is a list of all m nodes in our graph
connected_nodes = nodes[0];
// add nodes one by one until all are in the spanning tree
for next_node = 1 to (m-1)
   repeat
      select node connected_nodes[k]   // randomly, nearest, smallest degree, whatever
   until degree(k) < n   // make sure node to connect to does not violate max degree
   add edge between nodes[next_node] and new node connected_nodes[k]
   add nodes[next_node] to connected_nodes[]
end for

// the graph is now connected, add the desired number of edges
for e = m+1 to desired_edge_count
   select 2 nodes i,j from connected_nodes, each with degree < n
   add edge between nodes i and j
end for
//nodes[]是图中所有m个节点的列表
连接的_节点=节点[0];
//逐个添加节点,直到所有节点都位于生成树中
对于下一个_节点=1到(m-1)
重复
选择节点连接\u节点[k]//随机、最近、最小度,无论什么
直到度数(k)
图形是否有方向性?除了连接图形所需的
m-1
边之外,是否有最小数量的边?是否存在无效情况的可能性,如n=5和m=2。那么就不可能有图了。图不是定向的。所有边都是节点之间的双向路径。不,没有超过1的最小边数,因为我们不允许有任何断开连接的节点,所有节点都必须有一条到所有其他节点的路径@烧杯不存在n=5和m=2的可能性。我们的边不能多于节点-1@明白了,让我再问几个问题来弄清楚。如果可能的话,你能提供一个样本输入和样本输出吗。此外,每个节点的连接数不能超过n个,这不意味着它们应该正好有n个连接,或者如果可能的话,它们的连接数也可以少于n个?这确实解决了我的问题,但我认为可以通过在创建节点时跟踪节点,并向创建的每个节点添加前n-1个节点来改进。然后,当节点到达n条边时,将其从跟踪队列中移除。这将导致边的均匀分布,直到它们的末端,并且没有任何未连接的节点。这样我就不必在所有节点上循环至少两次。当然,你可以做很多改进。主要目的是使用生成树来确保连通性。如果在节点到达
n
连接时从
connected_nodes
列表中删除节点,则只需执行与所需边数相等的迭代次数。