ノード数 N
次数(偶数)m
確率p(0<p<1)
を与えたときに、
二次元配列link[j]の[/url]にノードを入れます。
iは枝が出る頂点、jは枝が到着する頂点です。
WSモデルのルールに従って、p=0つまり「枝が変化しない」場合のWSモデルまでは作れましたが、
p>0が作れません。
お分かりになる方、お助けください。
動作はこのようになります。
p=0,m=2,N=6の場合
1 2
2 3
3 4
4 5
5 6
6 1
下がこれまで作ったWSモデルプログラムです。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void ws_model(int N, int m, double p);
int main(int argc, char *argv[/url])
{
int N; //ノードの数
int m=atoi(argv[1]); //次数(偶数)
double p=atof(argv[1]); //確率
if(argc == NULL) exit(0);
printf("Input Vertex Size: ");
scanf("%d", &N);
ws_model(N,m,p);
return 0;
}
void ws_model(int N, int m, double p)
{
int i,j,q; //ノード番号
int edge;
int link[200][200];
srand((unsigned)time(NULL));
for(i=0;i<N;i++)
for(j=i+1;j<m/2+i+1;j++) {
if(j>=N) {
q=j-N;
}else{
q=j;
}
link[q]=1;
link[q]=1;
printf("%d %d 1\n", i+1, q+1);
/* ここまで p=0のときのWSモデル ノードのペア重複しない*/
/* 以下 0<p<1のときのWSモデル */
if(p>(double)rand()/RAND_MAX) {
?
//変化する枝の本数 p*m*N/2 本
/*全枝の中からp*m*N/2本をランダムに選び、
①同じ頂点以外②隣の頂点以外 の頂点に接続する
*/
}
}
}