主题:求助,大家来帮帮忙
有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);
}
下面的算法是我写的,但时间和空间复杂度太大,希望有
谁帮我修改一下,是程序最简单,速度最快,谢谢
#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);
}