题目链接: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; }