我想创建一个随机邻接矩阵,其中每个节点都与“ 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++;
}
}
}
}
}
}
答案 0 :(得分:0)
我假设我们在这里谈论有向图。
假设v
是许多顶点(节点),顶点d
(度,您的A
)的k
是从{{ 1}}到其他节点。
如果您仔细看,您会发现A
节点的d
值是k-th
行中的1
数。因此,唯一要做的就是为每一行绘制kth
和0s
与1s
(我们不将节点与其自身连接)元素的向量。
您可以通过向其写入v-1
并随机排列来绘制零和一的随机向量。
无向图的注意事项-您可以对右上角的矩阵三角形采用此算法,将已知值动态重写为左下角的三角形。比起从上到下的每一行,您都可以采用算法,该算法得出了其余的原始数据。