- 締切済み
スケールフリーネットワークをC言語で作成しているのですが。
現在、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); } 関数はこれを使おうと思っていますが、プロセスがわかりません。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- chikuwabu
- ベストアンサー率25% (19/76)
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が大きいものほど選ばれやすいように工夫してください.
- 麻野 なぎ(@AsanoNagi)
- ベストアンサー率45% (763/1670)
せめて、その「理論」や「プロセス」の理解している範囲が、普通の言葉であっても書かれていたら、もしかしたら、回答があるかもしれません。 ここでわかるのは、i と j のノードが、 add_edge(i, j); で接続できるところくらいです。
お礼
回答ありがとうございました。 回答を参考にして、ノード選択の部分をがんばって考えて、やってみようと思います。 ノードの選択が、スケールフリーの特徴なので、なんとかやってみます。