题目:已知两个单词,利用一个栈,将第一个单词变成第二个单词,求出所有可能的操作序列。
#include <stdio.h>
#include<iostream>
#include <string.h>
#include <vector>
#include<stack>
#define MAX 500
using namespace std;
char sta[MAX], ee[MAX];
vector<char> New;
vector<char> Ope;
stack<char> S;
int lens, lene;
bool flag;
void DFS(int i_idx, int o_idx, int s, int t) {
if (Ope.size() == 2 * lene) {
for (int i = 0; i < Ope.size(); i++) {
if (i != Ope.size() - 1)
printf("%c ", Ope[i]);
else
printf("%c", Ope[i]);
}
printf("\n");
return;
}
if (s <= lens - 1) {
S.push(sta[s]);
Ope.push_back('i');
DFS(i_idx + 1, o_idx, s + 1, t);
//还原
S.pop();
Ope.pop_back();
}
if (!S.empty() && S.top() == ee[t]) {
char tmp = S.top();
S.pop();
Ope.push_back('o');
DFS(i_idx, o_idx + 1, s, t + 1);
//还原
S.push(tmp);
Ope.pop_back();
}
}
int main(void) {
while (scanf("%s%s", sta, ee) == 2) {
printf("[\n");
lens = strlen(sta);
lene = strlen(ee);
if (lens != lene) {
printf("]\n");
continue;
}
else {
DFS(0, 0, 0, 0);
printf("]\n");
}
}
return 0;
}