誰可以幫我解釋一下這程序跑法??

shihyuyao 2005-03-20 06:00:10
void permute(char a[], int k, int input_var)
{
int i,j, inversion=0;
char temp;
if ( k == input_var )
{
printf("(");
for ( i=1; i<input_var; i++ )
printf(" %d,",a[i]);
printf(" %d )",a[i]);

for ( i=1; i<=input_var; i++ )
for ( j = i+1; j<=input_var; j++)
if (a[i] > a[j])
inversion++;

printf(" Inversion = %2d, ",inversion);
if ( (inversion %2) == 1 )
printf("odd permutation.\n");
else
printf("even permutation.\n");
}
else
{
for ( i=k; i<=input_var; i++)
{
temp=a[k]; a[k]=a[i]; a[i]=temp;
permute ( a, k+1, input_var);
temp=a[k]; a[k]=a[i]; a[i]=temp;
}
}
}

int main(int argc, char* argv[])
{
int i, input_var;
char setofnumber[10], ch;

for (i=0; i<10; i++)





permute ( a, k+1, input_var);
temp=a[k]; a[k]=a[i]; a[i]=temp;
}
}
}

int main(int argc, char* argv[])
{
int i, input_var;
char setofnumber[10], ch;

for (i=0; i<10; i++)
setofnumber[i]=i;

printf("Please input the number of entries to permute\n");
scanf("%d",&input_var);
permute(setofnumber, 1, input_var);

return 0;
}


上面是完整程式碼


____________________________________________________________________
下面這程式是怎麼跑的~~可以跟我說明一下

好像是利用遞迴嗎??


void permute(char a[], int k, int input_var)
{
int i,j, inversion=0;
char temp;
if ( k == input_var )
{
printf("(");
for ( i=1; i<input_var; i++ )
printf(" %d,",a[i]);
printf(" %d )",a[i]);

for ( i=1; i<=input_var; i++ )
for ( j = i+1; j<=input_var; j++)
if (a[i] > a[j])
inversion++;

printf(" Inversion = %2d, ",inversion);
if ( (inversion %2) == 1 )
printf("odd permutation.\n");
else
printf("even permutation.\n");
}
else
{
for ( i=k; i<=input_var; i++)
{
temp=a[k]; a[k]=a[i]; a[i]=temp;
permute ( a, k+1, input_var);
temp=a[k]; a[k]=a[i]; a[i]=temp;
}
}
}


...全文
140 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
C_projecting 2005-03-21
  • 打赏
  • 举报
回复
怎么会有两个int main(int argc, char* argv[])
llf_hust 2005-03-20
  • 打赏
  • 举报
回复
计算全排列
ltc_mouse 2005-03-20
  • 打赏
  • 举报
回复
楼主,偶不习惯打繁体字,没关系吧?

/*
Desc: 该函数求出序列a[k...input_var]的全排列,采用递归的方法
Para: a -----序列 a[1...9]
k -----起始位置
input_var ---- 结束位置
*/
void permute(char a[], int k, int input_var)
{
int i,j, inversion=0;
char temp;
if ( k == input_var ) /* 起始位置与结束位置一致,序列只有一个元素,排列结束 */
{
printf("(");
for ( i=1; i<input_var; i++ ) /* 输出一个序列 */
printf(" %d,",a[i]);
printf(" %d )",a[i]);

for ( i=1; i<=input_var; i++ ) /* 计算序列a[1...input_var]的逆序数 */
for ( j = i+1; j<=input_var; j++)
if (a[i] > a[j])
inversion++;

printf(" Inversion = %2d, ",inversion); /* 以下输出序列类型 */
if ( (inversion %2) == 1 )
printf("odd permutation.\n");
else
printf("even permutation.\n");
}
else /* 序列长度大于1时候,递归求解 */
{
for ( i=k; i<=input_var; i++)
{
temp=a[k]; a[k]=a[i]; a[i]=temp; /* a[k]取遍a[k...input_var]中的每个值 */
permute ( a, k+1, input_var); /* 求序列a[k+1...input_var]的全排列 */
temp=a[k]; a[k]=a[i]; a[i]=temp; /* 恢复a[k] */
}
}
}

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧