ノード数 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本をランダムに選び、 ①同じ頂点以外②隣の頂点以外 の頂点に接続する */ } } }