zoukankan      html  css  js  c++  java
  • 【ZOJ1004】Anagrams by Stack

    来源:Anagrams by Stack

    推导:dfs

      递归时记录步长的参数非常重要,既然涉及到dfs和bfs,肯定需要纵向的步长参数和横向的步长参数,本题用的是in(纵向)和out(横向)。  设计:

    dfs(in,out)
    {
    dfs(
    in+1,out);
    dfs(
    in,out+1);
    }
      
    bfs(in,out)
    {
    bfs(in,out+1);
    bfs(in+1,out);
    }

       由于需要回溯,因此要注意在执行一次搜索后将一些数据状态还原。

    结构:stack(栈),vector(用来存放i或o)

      void Prints()//输出一个解

      void dfs(int in,int out)//in表示入栈的数量,out表示出栈的数量

    代码:

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

    string s1,s2;
    stack
    <char> cs;
    vector
    <char> io;
    int l;//当前案例,字符串的长度

    void Prints()
    {
    for(int i=0;i<io.size();i++)
    cout
    <<io[i]<<" ";
    cout
    <<endl;
    }

    //in表示入栈数量,out表示出栈数量
    void dfs(int in,int out)
    {
    char t;
    if( in==l && out==l )//如果入栈和出栈数量都等于字符串长度,则表示已得到一个成功解
    {
    Prints();
    return;
    }

    if( in<l )
    {
    cs.push(s1[
    in]);
    io.push_back(
    'i');
    dfs(
    in+1,out);
    cs.pop();
    io.pop_back();
    }
    if( out<in && out <l && cs.top()==s2[out] )
    {
    t
    = cs.top();
    cs.pop();
    io.push_back(
    'o');
    dfs(
    in,out+1);
    cs.push(t);
    io.pop_back();
    }
    }

    int main()
    {
    while(cin>>s1>>s2)
    {
    l
    =s1.length();
    cout
    <<"["<<endl;
    dfs(
    0,0);
    cout
    <<"]"<<endl;
    }
    return 0;
    }
  • 相关阅读:
    安卓模拟器黑屏
    关系型数据库的1NF、2NF、3NF
    flowable数据库详解
    spring事务传播行为详解
    springboot整合activity
    各种java面试题目
    springCloud中增加gateway(超详细)
    mysql实现主从复制
    flowable整合springboot
    window安装linux系统
  • 原文地址:https://www.cnblogs.com/tuty/p/1836956.html
Copyright © 2011-2022 走看看