有n列火车进站,按先进后出的方法输出出站的不同排列
下面的算法是我写的,但时间和空间复杂度太大,希望有
谁帮我修改一下,是程序最简单,速度最快,谢谢




#include "iostream.h"
#include "stdio.h"
#define MAXSIZE 100

void print(int m,int n,int top,int z,int a[],int e)
{   
    int i,j,x,y,s,t,r,l,v,k;
    int b[MAXSIZE],c[MAXSIZE];
    for(i=m;i<=n;i++)                   //当前进站n-m列火车
    {    
        t=top;
        for(v=1;v<=e;v++)                
        c[v]=b[v]=a[v];     
        for(j=m;j<=i;j++)        //把进站的火车从先到后放入数组
        {b[t]=c[t]=j;
           t++;}
        if(i==n)                //判断当前进战的是否为最后一列火车
        {    k=n;               //从最后一个开始输出该数组
            while(k>0)      
            {
            cout<<b[k]<<" ";
            k--;
            }
            cout<<endl;
            
        
        }
        else
          for(x=1;x<t;x++)     //
            {   
                for(r=1;r<=n;r++)
                    b[r]=c[r];
                      l=t;
                                s=z;
                for(y=1;y<=x;y++)  //依次把火车火车放到数组最后
                {
                  l--;
                           b[s]=b[l];
                       s--;
                }
                          print(i+1,n,l,s,b,n);     //递归调用
                
            }
          
    }
  }
void main()
{int n;
int a[MAXSIZE];
cin>>n;
print(1,n,1,n,a,n);
}