#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++; //第一次比当前数
火车进站问题
最新推荐文章于 2023-02-12 21:44:32 发布
本文通过C语言实现了一个深度优先搜索(DFS)算法,来解决火车进站的问题。该问题要求找到所有使得火车从大到小排列的进站方案,并输出符合条件的全排列个数。算法中,利用栈的概念进行递归搜索,同时通过vis数组避免重复访问,最终通过print()函数输出符合条件的排列。
摘要由CSDN通过智能技术生成