関数の複数回呼び出すことがうまくできません、
コードの中に質問も書いておきました。
#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");
}
}