- 论坛徽章:
- 3
|
crulat 发表于 2012-06-20 03:31 ![]()
Invoke the script:
C 4 3P 4 3C 8 5P 5 5
呵呵
- #include <stdio.h>
- #include <stdlib.h>
- int *flag;
- void print(int*a,int num)
- {
- int i;
- num--;
- for(i=0;i<num;i++)
- printf("%d->",a[i]);
- printf("%d\n",a[num]);
- }
- int next(int*a,int m, int n,int how)
- {
- int i,j,k,x;
- if(how) {
- for(j=n-1;j>=0;j--) {
- for(i=a[j];i<m;i++)
- if(flag[i]==0)
- break;
- if(i<m) {
- flag[a[j]-1]=0;
- a[j]=i+1;
- flag[i]=1;
- for(x=0,k=j+1;k<n;k++) {
- while(flag[x]==1)x++;
- a[k]=x+1;
- flag[x]=1;
- }
- return 0;
- }
- flag[a[j]-1]=0;
- }
- }
- else {
- if(a[n-1]<m) {
- a[n-1]++;
- return 0;
- }
- for(i=n-1;i>0;i--)
- if(a[i]>a[i-1]+1)
- break;
- if(i>0) {
- a[i-1]++;
- for(;i<n;i++)
- a[i]=a[i-1]+1;
- return 0;
- }
- }
- return 1;
- }
- int main(int argc,char**argv)
- {
- int *a,i;
- char c;
- int m,n;
- int how=0;
- c=argv[3][0];
- sscanf(argv[1],"%d",&m);
- sscanf(argv[2],"%d",&n);
- if(!(0<n&&n<=m)||(c!='P'&&c!='p'&&c!='C'&&c!='c'))
- return 1;
- a = malloc(sizeof(int)*n);
- if(c=='P'||c=='p') {
- how =1;
- flag = malloc(sizeof(int)*m);
- for(i=0;i<n;i++)
- flag[i]=1;
- for(;i<m;i++)
- flag[i]=0;
- }
- if(a==NULL)
- return 1;
- for(i=0;i<n;i++)
- a[i]=i+1;
- while(1) {
- print(a,n);
- if(next(a,m,n,how))
- return 0;
- }
- }
复制代码 没有递归,只有迭代
- linux-p94b:~ # ./a.out 4 3 c
- 1->2->3
- 1->2->4
- 1->3->4
- 2->3->4
- linux-p94b:~ # ./a.out 4 3 p | xargs -n 6
- 1->2->3 1->2->4 1->3->2 1->3->4 1->4->2 1->4->3
- 2->1->3 2->1->4 2->3->1 2->3->4 2->4->1 2->4->3
- 3->1->2 3->1->4 3->2->1 3->2->4 3->4->1 3->4->2
- 4->1->2 4->1->3 4->2->1 4->2->3 4->3->1 4->3->2
- linux-p94b:~ # ./a.out 8 5 c | xargs -n 8
- 1->2->3->4->5 1->2->3->4->6 1->2->3->4->7 1->2->3->4->8 1->2->3->5->6 1->2->3->5->7 1->2->3->5->8 1->2->3->6->7
- 1->2->3->6->8 1->2->3->7->8 1->2->4->5->6 1->2->4->5->7 1->2->4->5->8 1->2->4->6->7 1->2->4->6->8 1->2->4->7->8
- 1->2->5->6->7 1->2->5->6->8 1->2->5->7->8 1->2->6->7->8 1->3->4->5->6 1->3->4->5->7 1->3->4->5->8 1->3->4->6->7
- 1->3->4->6->8 1->3->4->7->8 1->3->5->6->7 1->3->5->6->8 1->3->5->7->8 1->3->6->7->8 1->4->5->6->7 1->4->5->6->8
- 1->4->5->7->8 1->4->6->7->8 1->5->6->7->8 2->3->4->5->6 2->3->4->5->7 2->3->4->5->8 2->3->4->6->7 2->3->4->6->8
- 2->3->4->7->8 2->3->5->6->7 2->3->5->6->8 2->3->5->7->8 2->3->6->7->8 2->4->5->6->7 2->4->5->6->8 2->4->5->7->8
- 2->4->6->7->8 2->5->6->7->8 3->4->5->6->7 3->4->5->6->8 3->4->5->7->8 3->4->6->7->8 3->5->6->7->8 4->5->6->7->8
- linux-p94b:~ # ./a.out 5 5 p | xargs -n 12
- 1->2->3->4->5 1->2->3->5->4 1->2->4->3->5 1->2->4->5->3 1->2->5->3->4 1->2->5->4->3 1->3->2->4->5 1->3->2->5->4 1->3->4->2->5 1->3->4->5->2 1->3->5->2->4 1->3->5->4->2
- 1->4->2->3->5 1->4->2->5->3 1->4->3->2->5 1->4->3->5->2 1->4->5->2->3 1->4->5->3->2 1->5->2->3->4 1->5->2->4->3 1->5->3->2->4 1->5->3->4->2 1->5->4->2->3 1->5->4->3->2
- 2->1->3->4->5 2->1->3->5->4 2->1->4->3->5 2->1->4->5->3 2->1->5->3->4 2->1->5->4->3 2->3->1->4->5 2->3->1->5->4 2->3->4->1->5 2->3->4->5->1 2->3->5->1->4 2->3->5->4->1
- 2->4->1->3->5 2->4->1->5->3 2->4->3->1->5 2->4->3->5->1 2->4->5->1->3 2->4->5->3->1 2->5->1->3->4 2->5->1->4->3 2->5->3->1->4 2->5->3->4->1 2->5->4->1->3 2->5->4->3->1
- 3->1->2->4->5 3->1->2->5->4 3->1->4->2->5 3->1->4->5->2 3->1->5->2->4 3->1->5->4->2 3->2->1->4->5 3->2->1->5->4 3->2->4->1->5 3->2->4->5->1 3->2->5->1->4 3->2->5->4->1
- 3->4->1->2->5 3->4->1->5->2 3->4->2->1->5 3->4->2->5->1 3->4->5->1->2 3->4->5->2->1 3->5->1->2->4 3->5->1->4->2 3->5->2->1->4 3->5->2->4->1 3->5->4->1->2 3->5->4->2->1
- 4->1->2->3->5 4->1->2->5->3 4->1->3->2->5 4->1->3->5->2 4->1->5->2->3 4->1->5->3->2 4->2->1->3->5 4->2->1->5->3 4->2->3->1->5 4->2->3->5->1 4->2->5->1->3 4->2->5->3->1
- 4->3->1->2->5 4->3->1->5->2 4->3->2->1->5 4->3->2->5->1 4->3->5->1->2 4->3->5->2->1 4->5->1->2->3 4->5->1->3->2 4->5->2->1->3 4->5->2->3->1 4->5->3->1->2 4->5->3->2->1
- 5->1->2->3->4 5->1->2->4->3 5->1->3->2->4 5->1->3->4->2 5->1->4->2->3 5->1->4->3->2 5->2->1->3->4 5->2->1->4->3 5->2->3->1->4 5->2->3->4->1 5->2->4->1->3 5->2->4->3->1
- 5->3->1->2->4 5->3->1->4->2 5->3->2->1->4 5->3->2->4->1 5->3->4->1->2 5->3->4->2->1 5->4->1->2->3 5->4->1->3->2 5->4->2->1->3 5->4->2->3->1 5->4->3->1->2 5->4->3->2->1
- linux-p94b:~ #
复制代码 |
|