ZOJ1004 Anagrams by Stack

题目大意:规定 i 为入栈,o 为出栈,现在给两个字符串st1,st2,现在要将st1转化为st2,转化方法是,st1中字符从头开始入栈,并合理出栈构造出st2。请输出所有可能的出入栈步骤。

深度优先搜索+回溯~

#include<bits/stdc++.h>
using namespace std;
string s1,s2;
int len;
stack<char> st;
vector<char> path;
void dfs (int ipush,int ipop) {
    if (ipush==len&&ipop==len) {
        for (int i=0;i<path.size();i++)
        printf ("%c ",path[i]);
        printf ("\n");
        return;
    }
    if (ipush+1<=len) {
        st.push(s1[ipush]);
        path.push_back('i');
        dfs(ipush+1,ipop);
        st.pop();
        path.pop_back();
    }
    if (ipop+1<=len&&!st.empty()&&st.top()==s2[ipop]) {
        char now=st.top();
        st.pop();
        path.push_back('o');
        dfs(ipush,ipop+1);
        st.push(now);
        path.pop_back();
    }
} 
int main () {
    while (cin>>s1>>s2) {
        len=s1.length();
        printf ("[\n");
        dfs(0,0);
        printf ("]\n");
    }
    return 0;
}

 

posted @ 2020-02-15 11:09  zlc0405  阅读(122)  评论(0编辑  收藏  举报