関数の複数回呼び出すことがうまくできません、
コードの中に質問も書いておきました。
#include <stdio.h> #define MAX 61 #define N 4 int v[N + 1]; int p[N + 1]; int minv[N + 1]; int min1; void perm(int); void perm1(int); int main() { int i,tmp; int a[2][5]={{0,0,0,0,0}, {0,1,2,3,4}}; for (i=1;i<=N;i++){ p = i; } min1=10000; v[0]=0, v[1]=8, v[2]=7, v[3]=13, v[4]=24, /*交換*/(1と8の交換) tmp=a[1][1]; a[1][1]=v[1]; v[1]=tmp; /*呼び出し*/ perm(1); /*元にもどす*/ tmp=a[1][1]; a[1][1]=v[1]; v[1]=tmp; /*交換*/(2と8の交換) tmp=a[1][2]; a[1][2]=v[1]; v[1]=tmp; ここで「2,7,13,24」の最短距離とその道順を求めた permの処理をもう一回したいのですがわかりません。 どうやってよびだせばよいでしょうか。 return 0; } void perm(int i) { int j, t,sum1; sum1=0; if (i < N) { for (j = i; j <= N; j++) { t = p=v; p=v = p[j]=v[j]; p[j]=v[j] = t; perm(i + 1); t = p=v; p=v = p[j]=v[j]; p[j]=v[j] = t; } } else { int d[MAX+1][MAX+1]={ }; /*距離(sum)をだしている*/ for(j=1;j<N;j++) { sum1 +=d[v[j]][v[j+1]]; } /* printf("%d",sum1);*/ /*printf("%d",sum2);*/ /*printf("\n");*/ if(min1>=sum1){ min1=sum1; for(j=1;j<=N;j++){ minv[j]=v[j]; printf("%d ",minv[j]); } } printf("%d",min1); printf("\n"); } }