• 締切済み

マルチホップのプログラム

1000×1000のフィールドにランダムに100個の点を発生させて、9個のAPという点を設置し、APに点を繋いでいきます。直でAPに繋げない場合は他の点を介して1段ホップで繋ぎます。APと点の通信可能距離を150とする、点も同じ。ただし繋がりが他のAPと重ならないようにする。 直繋ぎまでは簡単なのですが、1段繋ぎのとき点が重なってしまいどうもうまくできません。どうしたらうまく繋げるかの条件のアドバイスをお願いします。 直繋ぎのまでのプログラムは以下です。 //点の設定 for(i=0;i<=109;i++){ x=random(1000); y=random(1000); zahyo[i][0]=x; zahyo[i][1]=y; if(i>0){for(j=0;j<=i-1;j++){if(x==zahyo[j][0]&&y==zahyo[j][1]){i--;}}} } //APのの位置設定 zahyo[0][0]=100,zahyo[0][1]=100; zahyo[1][0]=100,zahyo[1][1]=900; zahyo[2][0]=500,zahyo[2][1]=500; zahyo[3][0]=900,zahyo[3][1]=100; zahyo[4][0]=900,zahyo[4][1]=900; zahyo[5][0]=100,zahyo[5][1]=500; zahyo[6][0]=500,zahyo[6][1]=100; zahyo[7][0]=500,zahyo[7][1]=900; zahyo[8][0]=900,zahyo[8][1]=500; g=0; //座標を求め2次元配列にして格納 for(i=0;i<109;i++){ for(j=i+1;j<109;j++){ //2点間の座標の距離計算 x1=fabs(zahyo[i][0]-zahyo[j][0]); y1=fabs(zahyo[i][1]-zahyo[j][1]); d=sqrt(pow(x1,2)+pow(y1,2)); m[g][0]=i; //端点1 m[g][1]=zahyo[i][0]; //端点1の座標x m[g][2]=zahyo[i][1]; //端点1の座標y m[g][3]=j; //端点2 m[g][4]=zahyo[j][0]; //端点2の座標x m[g][5]=zahyo[j][1]; //端点2の座標y m[g][6]=d; //端点1と端点2の距離 m[g][7]=999; //APの点 m[g][8]=999; //直接繋がっている点 m[g][9]=999; //一段で繋がっている点 m[g][10]=999; //APの点 m[g][11]=999; //直接繋がっている点 m[g][12]=999; //APの種類 g=g+1; } } //距離150以下の端末を切る t=0; for(j=0;j<g;j++){ if(150>m[j][6]){ m[t][0]=m[j][0]; //端点1 m[t][1]=m[j][1]; //端点1の座標x m[t][2]=m[j][2]; //端点1の座標y m[t][3]=m[j][3]; //端点2 m[t][4]=m[j][4]; //端点2の座標x m[t][5]=m[j][5]; //端点2の座標y m[t][6]=m[j][6]; //端点1と端点2の距離 t=t+1; } } for(i=0;i<9;i++){retu1[i]=0;} //初期化 //直繋ぎ for(i=0;i<9;i++){ //APの点 count=0; for(j=0;j<t;j++){ //if(count==6){break;} //Axの制限数 if(m[j][0]==i){ //APの点がiならば m[j][7]=i; //APの点 m[j][8]=m[j][3];//端点2をm[j][8]に格納 m[j][12]=0; retu1[i]=retu1[i]+1;     //端点1 %3.0f(%3.0f,%3.0f),端点2 %3.0f(%3.0f,%3.0f),距離 %f,AP%1.0f⇒Ax%3.0f⇒Bx%3.0f,種類%1.0f\n fprintf(fp,"%3.0f,%3.0f,%3.0f,%3.0f,%3.0f,%3.0f,%f,%1.0f,%3.0f,%3.0f,%1.0f\n",m[j][0],m[j][1],m[j][2],m[j][3],m[j][4],m[j][5],m[j][6],m[j][7],m[j][8],m[j][9],m[j][12]); //if(2==i){count=count+1;}//AP(500,500)を制限 //count=count+1; //全てのAPを制限 } } ave1[i]=ave1[i]+retu1[i];//後で合計を出す }

みんなの回答

  • YEND77
  • ベストアンサー率56% (21/37)
回答No.1

(ご参考程度に・・・) がんばって読んでみたけど、あんまりわからなかった。。。 一般論として、、、作った本人が一番そのプログラムに近いので 本人が解析をするのが一番の近道だと思う。 まずは、今のパラメータでは、大きすぎるので 各パラメータを少なくして、やってみて、どのケースでどのような間違いが起きているかを 洗い出し、分析して、対策をとる。。 そしてパラメータを増やしてまたやってみて、、、、ってやれば答えはだせるハズ。

すると、全ての回答が全文表示されます。

関連するQ&A