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;
    }
  • 相关阅读:
    APP设计资源
    browsersync实现网页实时刷新(修改LESS,JS,HTML时)
    Browsersync + Gulp.js
    用原生js对表格排序
    js深复制
    c++刷题(43/100)矩阵旋转打印
    将本地的mongodb迁移到阿里云
    c++刷题(39/100)笔试题3
    c++刷题(37/100)笔试题2
    c++刷题(33/100)笔试题1
  • 原文地址:https://www.cnblogs.com/tuty/p/1836956.html
Copyright © 2011-2022 走看看