数据结构栈的应用,依然是深搜,参考了别人的代码,但是关于out栈还是有点不太理解
#include <iostream>
#include <stack>
using namespace std;
int n; //火车数量
int num; //调度方案数
template <class T>
void initStack(stack<T>& in)
{
num = 0;
for(int i = n; i > 0; --i)
in.push(i);
}
template <class T>
void showRes(stack<T> tmp, stack<T> out)
{
while( !out.empty() ){
cout << out.top() << " ";
out.pop();
}
while( !tmp.empty() ){
cout << tmp.top() << " ";
tmp.pop();
}
cout << endl;
}
template <class T>
void TrainSch(stack<T>& in, stack<T>& tmp, stack<T>& out)
{
if( in.empty() ){
num++;
showRes(tmp, out);
return;
}
// 尝试选择入站口的火车进调度栈
tmp.push(in.top());
in.pop();
// 递归调用
TrainSch(in, tmp, out);
// 尝试结束,火车归还给入站口
in.push(tmp.top());
tmp.pop();
if( !tmp.empty() ){
// 尝试从调度栈选择火车出站
out.push(tmp.top());
tmp.pop();
// 递归调用
TrainSch(in, tmp, out);
// 尝试结束,火车归还给调度栈
tmp.push(out.top());
out.pop();
}
}
int main()
{
while( cin >> n )
{
stack<int> in, tmp, out;
initStack(in);
TrainSch(in, tmp, out);
cout << num << endl;
}
return 0;
}