>>10
mini_dは最初は0で初期化しましたけど、それじゃ比較できないよなってことで
適当に大きい数を最初に入れてます
それと自分で実験してみたんですが、大域でとった場合は関数の引数に入れなくても、
またreturnしなくても数値代入ができるようなのでそうしました。
/**/で説明入れてみます。

void search(int t){
int y,i,j;
for(y = 0; y < N; y++){
/*t番目に巡回したときにまだ回ってない点があるならそこにチェック(TRUE)を入れる*/
if(s1[y] == FALSE){
s1[y] = TURE; s2[t] = y;

/*まだ回りきってないなら次に行く点を探す*/
if(t < N-1) search(t+1);
/*回りきっていたら距離計算、比較*/
else{
for(i = 1; i < N; i++)  d2 += d1[s2[i-1]][s2[i]];
d2 += d1[s2[0]][s2[N-1]];
if(d2 < mini_d){
mini_d = d2;
for(j = 0; j < N; j++)  mini_s2[j] = s2[j]; d2 = 0;
}
}
/*バックトラックのために一個前に回った点の履歴を削除*/
s1[y] = FALSE;
}
}
}