创建随机邻接矩阵,每个节点的最小度为“ k”

时间:2019-04-08 14:38:35

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

我想创建一个随机邻接矩阵,其中每个节点都与“ 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++;
        }
             }
          }
      }
   }
}

1 个答案:

答案 0 :(得分:0)

我假设我们在这里谈论有向图。 假设v是许多顶点(节点),顶点d(度,您的A)的k是从{{ 1}}到其他节点。

如果您仔细看,您会发现A节点的d值是k-th行中的1数。因此,唯一要做的就是为每一行绘制kth0s1s(我们不将节点与其自身连接)元素的向量。

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

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