#include #include #include #include #include //全マッチング数の計算 n*(n-2)*(n-4)*...*1を返す int all_explo(int n) { if(n>1) { return n*all_explo(n-2); } else if(n==1) { return 1; } } //最大マッチング探査用関数 double explo(int Nexp,double d_euc[(int)Nexp][(int)Nexp],int vertex[(int)Nexp],double d,int decide) { int i,j,flag=0; //最後の頂点データが埋まっている、つまり下の関数でi++が行われた後にこの関数に入ってくるとまずここに入る if(vertex[(int)Nexp-1]!=0) { //最後と最後の一個前の頂点データに格納されている組み合わせによる距離をdから引く d-=d_euc[vertex[(int)Nexp-2]][vertex[(int)Nexp-1]]; //距離データ配列の中の使用済みマークを消す(使用済みマークは自己との距離、つまり00、11などに-1を入れている ここが0なら未使用頂点ということ) d_euc[vertex[(int)Nexp-2]][vertex[(int)Nexp-2]]=0; d_euc[vertex[(int)Nexp-1]][vertex[(int)Nexp-1]]=0; //一番後ろの頂点データ組み合わせを0にする vertex[(int)Nexp-2]=0; vertex[(int)Nexp-1]=0; //現在決定中の頂点番号decideを-2(このdecideは頂点データvertexの何番目の頂点を現在決定しているか表す 0<=decidedmax) { dmax=d; for(j=0;j