#include<stdio.h>
int cont=1; /*全局变量,用于记录所有可能的出栈序列个数*/
void print(int str[],int n);
/*求整数序列 str[]从k到 n 的全排列*/
void perm(int str[],int k,int n)
{int i,temp;
if (k==n-1) print(str,n);
else
{ for (i=k;i<n;i++)
{temp=str[k]; str[k]=str[i]; str[i]=temp;
perm(str,k+1,n); /*递归调用*/
temp=str[i]; str[i]=str[k]; str[k]=temp;
}
}
}
/*本函数判断整数序列 str[]是否满足进出栈规则,若满足则输出*/
void print(int str[],int n)
{int i,j,k,l,m,flag=1,b[2];
for(i=0;i<n;i++) /*对每个 str[i]判断其后比它小的数是否为降序序列*/
{ m=0;
for(j=i+1;j<n&&flag;j++)
if (str[i]>str[j]) {if (m==0) b[m++]=str[j];
else {if (str[j]>b[0]) {flag=0;}
else b[0]=str[j];
}
}
}
if(flag) /*满足出栈规则则输出 str[]中的序列*/
{ printf(" %2d:",cont++);
for(i=0;i<n;i++)
printf("%d",str[i]);
printf("/n");
}
}
void main()
{int str[100],n,i;
printf("input a int:"); /*输出排列的元素个数*/
scanf("%d",&n);
for(i=0;i<n;i++) /*初始化排列集合*/
str[i]=i+1;
printf("input the result:/n");
perm(str,0,n);
printf("/n");
}
火车进站出站
最新推荐文章于 2019-03-29 23:01:24 发布