#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define maxn 1111
/*比当前数要小且在在他后面的数若从大到小排列则符合要求*/
int n,count;
int ans[maxn],vis[maxn],num[maxn];
void print();//用来输出全排列中符合要求的个数
void dfs(int k,int cnt) //深搜枚举1-n的全排列,k为数组下标,cnt为已经排列的个数
{
int i;
if(cnt==n) //当排列个数与原数据相同时,不再进行搜索
{
print();
return ;
}
for(i=0;i<n;i++)
{
if(!vis[i]) //如过当前位没有被访问过,则将他写入数组,继续进行下一位的搜索
{
vis[i]=1;
ans[cnt]=num[i];
dfs(k+1,cnt+1);
vis[i]=0; //回朔
}
}
}
void print()
{
int i,j,flag=1,h,temp;//temp用来记录比当前数小的数
for(i=0;i<n;i++)
{
h=0;//用来判断temp中有没有值
for(j=i+1;j<n&&flag;j++)
{
if(ans[i]>ans[j])
{
if(h==0) temp=ans[j],h++; //第一次比当前数
火车进站问题
最新推荐文章于 2021-03-06 15:15:29 发布