電子書籍の厳選無料作品が豊富!

現在、C言語でスケールフリーネットワーク(BAモデル)を作成しているのですが、理論はわかるのですが、プログラムが不得意でどのように作っていったらいいのかわかりません。

現在作成途中のソース。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

#define MAXDEG 500
#define N 30000 //ノードの数

typedef struct node{
int deg;
int adj[MAXDEG];//adjacent隣接
double prob;//確率
} Node;

/*プロトタイプ宣言*/
add_edge(int id1,int id2);
Node NODES[N];

int main(){

ここがどうしていいかわかりません。

}

add_edge(int id1,int id2){

Node *node1,*node2;

node1 = &NODES[id1];
node2 = &NODES[id2];

node1->adj[node1->deg]=id2;
(node1->deg)++;
node2->adj[node1->deg]=id1;
(node2->deg)++;

if(node1->deg >= MAXDEG-1 || node2->deg > MAXDEG-2){
printf("DEG overflow\n");
exit(0);
}
関数はこれを使おうと思っていますが、プロセスがわかりません。
よろしくお願いします。

A 回答 (2件)

int main(){


 for(int i = 0; i < N; i++){
  int j = select_node(i);
  add_edge(i, j);
 }
}

//iが接続するべきノードを返す関数
int select_node(int i){
 //i番目のノードが接続する既存ノードを選択(=j)
 return j;
}


ようするに,i番目のノードをj=「0~(i-1)番目のノードのうち一つ」と接続させればいいんじゃないでしょうか.
このとき,jはdegが大きいものほど選ばれやすいように工夫してください.
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
回答を参考にして、ノード選択の部分をがんばって考えて、やってみようと思います。
ノードの選択が、スケールフリーの特徴なので、なんとかやってみます。

お礼日時:2008/05/13 11:22

せめて、その「理論」や「プロセス」の理解している範囲が、普通の言葉であっても書かれていたら、もしかしたら、回答があるかもしれません。


ここでわかるのは、i と j のノードが、 add_edge(i, j); で接続できるところくらいです。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!