首页 > 其他 > 详细

ZOJ1004 Anagrams by Stack

时间:2020-02-15 11:38:33      阅读:49      评论:0      收藏:0      [点我收藏+]

题目大意:规定 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;
}

 

ZOJ1004 Anagrams by Stack

原文:https://www.cnblogs.com/zhanglichen/p/12310919.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!