1、火车进站
class train_station
{
public:
void get_result()
{
int num=0;
int tem=0;
cin>>num;
int size=num;
while(size--)
{
cin>>tem;
numbers.push_back(tem); ///保存进站顺序
}
_partion(numbers,numbers.begin()); //排列组合
sort(re.begin(),re.end());
//找出符合要求的
for(size_t i=0;i<re.size();i++)
{
if(_is_true(re[i],numbers,numbers.size()))
{
for(size_t j=0;j<re[i].size();j++)
{
cout<<re[i][j];
if((j<re[i].size()-1))
cout<<" ";
}
cout<<endl;
}
}
}
private:
void _partion(vector<int> &str,vector<int>::iterator begin) //排列组合 注意必须是向量的引用,不然会出现迭代器失效的问题
{
if(begin==str.end())
{
re.push_back(str);
}
else
{
for(vector<int>::iterator i=begin;i!=str.end();i++)
{
int tem=*i;
*i=*begin;
*begin=tem;
_partion(str,begin+1);
tem=*i;
*i=*begin;
*begin=tem;
}
}
}
bool _is_true(vector<int> &popstr,vector<int> &pushstr,int length) //判断该组合是否是火车的正确出栈顺序
{
//numbers是入站序列,str是出站序列
if(popstr.empty()||pushstr.empty()||length<=0)
return false;
vector<int>::iterator popOrder=popstr.begin();
vector<int&