题目:已知两个单词,利用一个栈,将第一个单词变成第二个单词,求出所有可能的操作序列。

#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;

}
05-06 08:34