【问题标题】:Create random adjacency matrix with each node having a minimum degree of 'k'创建随机邻接矩阵,每个节点的最小度数为“k”
【发布时间】:2019-04-08 14:38:34
【问题描述】:

我想创建一个随机邻接矩阵,其中每个节点都连接到“k”个其他节点。邻接矩阵表示的图是无向的。

我从邻接矩阵中的 7 个节点开始,每个节点都应该连接到至少 3 个其他节点。到目前为止,我已经能够得到这个:

0 1 1 0 0 0 0
1 0 1 1 0 0 0
1 1 0 1 1 0 0
0 1 1 0 1 1 0
0 0 1 1 0 1 1
0 0 0 1 1 0 1
0 0 0 0 1 1 0

从矩阵可以看出,第一行和最后一行的连接少于三个。

到目前为止我的实现是:

   for( int i= 0; i<7; i++){
  for( int j= i+1; j<7; j++){
    if(i==j){
        topo[i][j]=0;
     }
    else{    
        for(int k=j; k<i+3 && k<7; k++){
            int connectivity=0;
            while(connectivity<3){
           if(topo[i][k]!=1 && topo[k][i]!=1){
                   topo[i][k]=1;
               topo[k][i]=1;
               connectivity++;
                }
           else{
               connectivity++;
        }
             }
          }
      }
   }
}

【问题讨论】:

  • 我有点困惑。您的标题说“至少 7”,然后问题说“正好 7”,然后问题说“至少 3”。你的目标是哪一个?
  • 考虑:k 第一次通过的值范围是多少(i == 0 和 j == 1)?

标签: c++ c++11 networking graph routing


【解决方案1】:

我假设我们在这里讨论的是有向图。 假设v 是多个顶点(节点),而顶点Ad(度数,您的k)是从A 到其他节点的许多边。

如果你仔细看你会发现,k-th 节点的d 值是kth 行中1 的一个数字。所以唯一要做的就是为每一行绘制0s1sv-1(我们不将节点与自身连接)元素的向量。

您可以通过向其写入d 并随机排列来绘制零和一的随机向量。

无向图注意事项 - 您可以将此算法应用于右上矩阵三角形,将已知值动态重写为左下角。比从上到下的每一行你可以采用算法,绘制其余的原始数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多