设有编号分别为1,2,3,4的4辆列车,顺序进入一个栈式结构的站台.试写出这4辆车开出站台的所

2025-06-29 02:18:06
推荐回答(1个)
回答1:

#include
#include
#include
#include
using namespace std;

void helper(string &inTrain,vector &outTrain,int index)
{
if(index == inTrain.size())
{
return;
}//if
if(index == 0)
{
string outNum("");
outNum += inTrain[index];
outTrain.push_back(outNum);
}//if
else
{
vector newOutTrain;
// 出栈序列
int size = outTrain.size();
// 第index辆火车进栈
for(int i = 0;i < size;++i)
{
// 第i个出栈序列
int count = outTrain[i].size();
// 寻找前一个进栈的火车下标
int targetIndex;
for(int j = 0;j < count;++j)
{
if(inTrain[index-1] == outTrain[i][j])
{
targetIndex = j;
break;
}//if
}//for
string tmp(outTrain[i]);
for(int j = targetIndex;j <= count;++j)
{
tmp.insert(tmp.begin()+j,inTrain[index]);
newOutTrain.push_back(tmp);
tmp.erase(tmp.begin()+j);
}//for
}//for
swap(outTrain,newOutTrain);
}//else
helper(inTrain,outTrain,index+1);
}

vector TrainLeft(string inTrain){
vector result;
int size = inTrain.size();
if(size <= 0)
return result;
helper(inTrain,result,0);
sort(result.begin(),result.end());
return result;
}

int main()
{
int n;
while(cin>>n)
{
string train("");
int num;
for(int i = 1;i <= n;++i)
{
cin>>num;
train += num + '0';
}//for
vector trainNum = TrainLeft(train);
// 输出
int size = trainNum.size();
for(int i = 0;i < size;++i)
{
int count = trainNum[i].size();
for(int j = 0;j < count;++j)
{
if(j == 0)
cout< else
cout<<" "< }//for
cout<<" "< }//for
}//while
return 0;
}