複雑ネットワークのWSモデルについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
forget

複雑ネットワークのWSモデルについて

#1

投稿記事 by forget » 18年前

ワッツ・ストロガッツモデル(WSモデル)をC言語で作っていますが、つまづいています。

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

“C言語何でも質問掲示板” へ戻る