Anagrams by Stack(STL)

Posted 未定_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Anagrams by Stack(STL)相关的知识,希望对你有一定的参考价值。

Anagrams by Stack
题意:i是进栈,o是出栈,给你两个字符串判断从串1到串2的进栈出栈情况。比如:

输入:
madam
adamm
输出:
[
i i i i o o o i o o 
i i i i o o o o i o 
i i o i o i o i o o 
i i o i o i o o i o 
]

回溯算法,DFS

#include<iostream>
#include<stack>
#include<vector>
using namespace std;

string a,b;//串1与串2
stack<char>s;
vector<char>v;//存放i与o
int length;
void dfs(int in,int out)

    cout<<in<<" "<<out<<endl;
    if(in==length&&out==length)
    
        for(int i=0;i<v.size();i++)
            cout<<v[i]<<" ";
        cout<<endl;
    
    if(in<length)
    
        s.push(a[in]);
        v.push_back('i');
        dfs(in+1,out);//从这一步出来以后符合的结果输出,不符合的通过下面一步回溯
        s.pop();//回溯
        v.pop_back();//回溯
    
    if(out<in&&out<length&&s.top()==b[out])
    
        char t=s.top();
        s.pop();
        v.push_back('o');
        dfs(in,out+1);//out+1改变串2的头,也就是前一个字母已经输出了,继续判断下一位
        s.push(t);//回溯
        v.pop_back();//回溯
    

int main()

    while(cin>>a>>b)
    
        length=a.length();
        cout<<"["<<endl;
        dfs(0,0);
        cout<<"]"<<endl;
    
    return 0;


以上是关于Anagrams by Stack(STL)的主要内容,如果未能解决你的问题,请参考以下文章

Anagrams by Stack(STL)

ZOJ 1004 Anagrams by Stack

12Anagrams by Stack

ZOJ1004 Anagrams by Stack

ZOJ Problem Set - 1004 Anagrams by Stack (回溯法)

CodeForces 190C STL