题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1004
说实话,没看懂;抄答案,仍然不怎么懂……
#include<iostream>
#include<stack>
#include<cstring>
#include<vector>
using namespace std;
vector<char> ans; //储存'i','o'序列
int len;
stack<char> Push; //栈
string Begin,Goal; //初始字符串,目标字符串
void DFS(int iBegin, int iGoal) //初始字符串和目标字符串的指针
{
if (iBegin == len && iGoal == len)
{
for (int i=0; i<ans.size(); i++)
cout<<ans[i]<<' ';
cout<<endl;
}
if (iBegin + 1 <= len)
{
Push.push(Begin[iBegin]);
ans.push_back('i');
DFS(iBegin+1, iGoal);
Push.pop();
ans.pop_back();
}
if (iGoal + 1 <= iBegin && iGoal + 1 <= len && Push.top() == Goal[iGoal])
{
char tmp = Push.top();
Push.pop();
ans.push_back('o');
DFS(iBegin,iGoal+1);
Push.push(tmp);
ans.pop_back();
}
}
int main()
{
while (cin>>Begin>>Goal)
{
ans.clear();
len = Begin.length();
cout<<'['<<endl;
DFS(0,0);
cout<<']'<<endl;
}
return 0;
}