一道全排列的问题!!求帮看看代码
程序代码:#include<stdio.h>
#include<stdlib.h>
int res[10];
void perm(int k,int a[]);
void swap(int *a,int *b);
void output(int *list);
void circle_right(int a[],int m,int i);
void circle_left(int a[],int m,int i);
int main(int c,char **v)
{
int i,n;
scanf("%d",&n);
if(c==2)
n=atoi(v[1]);
for (i=0;i<n;i++)
res[i]=i+1;
res[i]=0;
perm(n,res);
}
void perm(int k,int a[])
{
int i;
if(k==1)
{
output(res);
return;
}
for(i=0;i<k;i++)
{
swap(&a[0],&a[i]);
circle_right(a,1,i);
perm(k-1,&a[1]);
circle_left(a,1,i);
swap(&a[i],&a[0]);
}
}
void swap(int *a,int *b)
{
int tmp=*a;
*a=*b;
*b=tmp;
}
void output(int *list)
{
for(;*list!=0;list++)
{
putchar(*list+'0');
putchar(' ');
}
putchar('\n');
}
void circle_right(int a[],int m,int i)
{
int temp;
int j,k;
for(k=1;k<=i-m;k++)
{
temp=a[i];
for(j=i;j>m;j--)
a[j]=a[j-1];
a[m]=temp;
}
}
void circle_left(int a[],int m,int i)
{
int temp;
int j,k;
for(k=1;k<=i-m;k++)
{
temp=a[m];
for(j=m;j<i;j++)
a[j]=a[j+1];
a[i]=temp;
}
}
全排列数的问题 如
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
如果将每行上的输出看成一个数字,则所有输出构成升序数列。
我的问题是输出4的时候就出现了错误,似乎是void circle_right(int a[],int m,int i)和void circle_left(int a[],int m,int i)的问题,具体我不太清楚,求解答










