回 帖 发 新 帖 刷新版面

主题:[讨论]帮忙

问题描述:
在一个列车调度站中,1条轨道连接到1 条侧轨处,形成1 个铁路转轨栈,如下图所示。
其中左边轨道为车皮入口,右边轨道为出口,编号为1,2,…,n的n个车皮从入口依次进
入转轨栈,由调度室安排车皮进出栈次序,并对车皮按其出栈次序重新编序a , a , ,an 1 2  。
«编程任务:
给定正整数n,编程计算左边轨道车皮编号依次为1,2,…,n时,在右边轨道最多可
以得到多少个不同的车皮编序方案。
例如当n=3 时,最多得到5组不同的编序方案如下:
1 2 3
1 3 2
2 1 3
2 3 1
3 2 1

#include<iostream>
using namespace std;
int num = 0;
class OutOfBounds{};
class NoMem{};
template<class T>
class Stack
{
    public:
        Stack(int Max = 20);
        ~Stack() {delete [] stack;}
        bool Empty() const {return top == -1;}
        bool Full() const {return top == MaxTop;}
        T Top () const ;
        Stack<T>& Push(const T& x);
        Stack<T>& Pop(T& x);
        void  PrintStack (ostream& out) const;
        friend void sort( Stack<T> &wait , Stack<T> &in , const int &n , const int &m );
    private:
        int top;
        int MaxTop;
        T *stack;
};
template<class T>
Stack<T>::Stack(int Max)
{
    MaxTop = Max - 1;
    stack = new T[Max];
    top = -1;
}
template<class T>
T Stack<T>::Top() const
{
    if (Empty()) throw OutOfBounds();
    else return stack[top];
}
template<class T>
Stack<T>& Stack<T>::Push(const T& x)
{
    if (Full()) throw NoMem();
    stack[++top] = x;
    return *this;
}
template<class T>
Stack<T>&Stack<T>::Pop(T& x)
{
    if (Empty()) throw OutOfBounds();
    x = stack[top--];
    return *this;
}
template<class T>
void Stack<T>::PrintStack(ostream& out) const
{
    for (int i = 0;i < top+1;++i)
        out << stack[i] << " ";
    
}
//重载输出函数
template<class T>
ostream & operator << (ostream & out,const Stack<T> & x) 
{
    x.PrintStack(out);
    return out;
}
template<class T>
void sort( Stack<T> &wait , Stack<T> &in , const int &n , const int &m )
{
    T result[1000];
    
    T x,y;
    if( wait.Empty() && in.Empty() )
    {
        for( int i = 0; i < n; i++ )
            cout << result[i] << " ";
        cout << endl;
        num++;
    }
    else
    {    
        if( !in.Empty())
        {
            y = in.Top();
            in.Pop(y);
            result[m] = y;
            sort( wait , in , n , m+1 );
            in.Push( y );
        }        
        if( !wait.Empty() )
        {
            x = wait.Top();
            wait.Pop(x);
            in.Push( x );
            sort( wait , in , n , m );
            [color=FF00FF]in.Pop();////////////这里有错,麻烦帮忙一下啊[/color]             
            wait.Push( x );
        }        

    }
}

int main()
{
    Stack<int> s1 , s2;
    for( int i = 3; i > 0; i-- )
        s1.Push(i);
    sort( s1 , s2 , 3 , 0 );
    cout << num << endl;
    return 0;
}

回复列表 (共2个回复)

沙发

1. 没注意到Pop()函数有个参数吗?
2. 把friend void sort( Stack<T> &wait , Stack<T> &in , const int &n , const int &m );删掉.

板凳

我知道啊,就是那个少了参数的POP(),函数不知道要带那一个参数进去啊
就是一直乱码

我来回复

您尚未登录,请登录后再回复。点此登录或注册