火车进站出站

#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");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值