一道全排列的问题!!求帮看看代码
程序代码:
#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)的问题,具体我不太清楚,求解答