【问题标题】:Limiting the number of edges to a vertex in a randomly generated graph将边数限制为随机生成图中的一个顶点
【发布时间】:2012-09-22 10:42:34
【问题描述】:

我使用 Boost 图形库生成了一个随机无向图。

我随机添加顶点和边的数量如下:

RNGType rng( time(0) );
    boost::uniform_int<> one_to_four( 1, (N-1) );
    boost::variate_generator< RNGType, boost::uniform_int<> >gen(rng, one_to_four);
    for(int i =0; i<(N-1); i++)
    {
        int k = 0;
        while(k<4)
        //while(k<(N/2))
        {  
            int n  = gen();
            // Adding edges onto graph

            if(!boost::edge(i, n, g).second && !boost::edge(n, i, g).second)    
                {
                if(i !=n )
                {       
                add_edge(i, n, g);
                k++;
                }
                }
        }
    }    

正如所见,我使用while(k&lt;4) 将边数限制为 4,但它仅适用于传入边。我想将传入和传出边都限制为 4。例如,如果我输入顶点数为 10,我得到:

graph G{
0;
1;
2;
3;
4;
5;
6;
7;
8;
9;
0--1 ;
0--2 ;
0--2 ;
0--2 ;
1--3 ;
2--1 ;
2--4 ;
3--2 ;
3--2 ;
3--4 ;
3--0 ;
4--1 ;
4--9 ;
4--8 ;
5--
and so on..
}

可以看出已经有 4 个从 0 的出边,并且有一个来自 (3,0) 的入边,因此离开和进入顶点 0 的边数变为 5,我想将其限制为4 个或更少,但不超过 4 个。

任何帮助将不胜感激。

非常感谢。

干杯!!

【问题讨论】:

    标签: c++ boost graph boost-graph


    【解决方案1】:

    您可以使用in_degreeout_degree 请求节点的传入和传出边数。

    如果您将 k 初始化为 in_degree(i, g) + out_degree(i, g) 而不是 0,您将确保考虑到已为节点 i 添加的边。

    在添加 i 和 n 之间的边之前,您还需要检查 (in_degree(n) + out_degree(n) + 1) &lt;= 4。这将确保您不会向其中一个随机节点添加太多边。

    【讨论】:

    • 非常感谢朋友。但是我的时间呢?应该是 while(k
    • 是的,没错。所以 k 表示节点 i 上的边数。你从它已经有多少边开始计数,然后继续添加边,直到你有 4 个。
    • 由于某种原因,当我包含你的代码时,我在输出中什么也没有。我的图表没有创建。
    • 非常感谢兄弟,我搞定了。你让我今天一整天都感觉很好。干杯!!
    • 您好,其中一个顶点未连接到其他顶点,我该如何解决?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2019-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多