题目:已知两个单词,利用一个栈,将第一个单词变成第二个单词,求出所有可能的操作序列。

#include <stdio.h>
#include<iostream>
#include <string.h>
#include <vector>
#include<stack>
#define MAX 500
using namespace std;
char sta[MAX], ee[MAX];
vector<char> New;
vector<char> Ope;
stack<char> S;

int lens, lene;
bool flag;

void DFS(int i_idx, int o_idx, int s, int t) {
    if (Ope.size() == 2 * lene) {
        for (int i = 0; i < Ope.size(); i++) {
            if (i != Ope.size() - 1)
                printf("%c ", Ope[i]);
            else
                printf("%c", Ope[i]);
        }
        printf("\n");
        return;
    }
    if (s <= lens - 1) {
        S.push(sta[s]);
        Ope.push_back('i');
        DFS(i_idx + 1, o_idx, s + 1, t);
        //还原
        S.pop();
        Ope.pop_back();
    }

    if (!S.empty() && S.top() == ee[t]) {
        char tmp = S.top();
        S.pop();
        Ope.push_back('o');
        DFS(i_idx, o_idx + 1, s, t + 1);
        //还原
        S.push(tmp);
        Ope.pop_back();
    }

}

int main(void) {

    while (scanf("%s%s", sta, ee) == 2) {
        printf("[\n");
        lens = strlen(sta);
        lene = strlen(ee);
        if (lens != lene) {
            printf("]\n");
            continue;

        }
        else {
            DFS(0, 0, 0, 0);
            printf("]\n");
        }
    }
    return 0;

}

UVA732【DFS+栈】的更多相关文章

  1. LOJ 534 花团(线段树+dfs栈)

    题意 https://loj.ac/problem/534 思路 又是复杂度错误的一题,\(O(n^2\log n)\) 能过 \(15000\) . 虽然看起来强制在线,其实是一道假的在线题.首先按 ...

  2. 【BZOJ2783】[JLOI2012]树 DFS+栈+队列

    [BZOJ2783][JLOI2012]树 Description 在这个问题中,给定一个值S和一棵树.在树的每个节点有一个正整数,问有多少条路径的节点总和达到S.路径中节点的深度必须是升序的.假设节 ...

  3. 剑指offer:对称的二叉树(镜像,递归,非递归DFS栈+BFS队列)

    1. 题目描述 /** 请实现一个函数,用来判断一颗二叉树是不是对称的. 注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的 */ 2. 递归 思路: /** 1.只要pRoot.left和 ...

  4. 紫书 习题7-13 UVa 817(dfs+栈求表达式的值)

    题目链接  点击打开链接 这道题分为两个部分, 一用搜索枚举每种可能, 二计算表达式的值, 有挺多细节需要注意 特别注意我的代码中在计算表达式的值中用到了一个!(代码枚举中的!表示不加符号, 我现在说 ...

  5. [模板] tarjan/联通分量/dfs树

    //to update 边的分类 有向图边分为四类: 树边, 前向边, 返祖边(后向边), 横叉边. 上图: 判定 有向图 对图进行dfs, 不考虑已经遍历过的点, 得到dfs序 \(dfn_i\). ...

  6. 【紫书】Ordering Tasks UVA - 10305 拓扑排序:dfs到底再输出。

    题意:给你一些任务1~n,给你m个数对(u,v)代表做完u才能做v 让你给出一个做完这些任务的合理顺序. 题解:拓扑排序版题 dfs到底再压入栈. #define _CRT_SECURE_NO_WAR ...

  7. bfs,dfs区别

    一般来说用DFS解决的问题都可以用BFS来解决. DFS(深搜的同时考虑回溯) bfs=队列,入队列,出队列:dfs=栈,压栈,出栈 bfs是按一层一层来访问的,所以适合有目标求最短路的步数,你想想层 ...

  8. ZOJ1004 DFS基础

    这道题一看就觉得是DFS,但是,不对,还有栈,这就有点难办了. DFS+栈一波新姿势. 在DFS里面用栈的思想. DFS主要就是搜下去, 然后前一个状态标记,搜完以后,还是要保持前一个状态. 然后就把 ...

  9. 2186 Popular Cows

    Popular Cows Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 41771   Accepted: 16955 De ...

随机推荐

  1. 聊聊Docker

    为什么是Docker 进入21世纪,继互联网之后,云计算开始大放异彩.云计算是互联网发展后期的必然方向,反过来,云计算也进一步推动了互联网的发展.云计算模式最关键的突破就是资源使用方式的改变. 云计算 ...

  2. JSON基础(Java)

    1.json maven 依赖(以下都以第一个包为例) <dependency> <groupId>org.json</groupId> <artifactI ...

  3. js对象系列【一】深层理解对象与原型

    我们先从盘古开天辟地时捋一捋对象: 从宏观内容来讲,javascript是一个属性的集合,包括值,函数,而整个集合也可以类比为一个对象. js = { a的变量名: a的值, ... 函数b: fun ...

  4. protobuf(quickStart)

    1.简介 Protocol Buffers是Google开发一种数据描述语言,能够将数据进行序列化,可用于数据存储.通信协议等方面. 可以理解成更快.更简单.更小的JSON或者XML,区别在于Prot ...

  5. 常用Markdown公式整理 && 页内跳转注意 && Markdown preview

    目录: 常用Markdown公式及注意事项 标题 列表 链接 区块 代码块 / 引用  粗体和斜体 文字块 图片 表格 横线 页内跳转注意事项 其他重要需注意 Markdown preview 前提: ...

  6. 数据库 --> sqlite3总结

    Sqlite3总结 SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中. sqlite语句 #sqlite3 test.db //设置宽度为2sqlit ...

  7. sessionStorage和localStorage的用法,不同点和相同点

    一,共同点 (1)存储时用setItem: localStorage.setItem("key","value");//以"key"为名称存 ...

  8. 介绍C语言指针

    最近心态不太好,但是还是控制自己刷一下算法题,但是看着多次出现的 “Segmentation fault”,心态又爆炸啦.我只想说:“我也早觉得有写一点东西的必要了.离三月十八日也已有两星期,忘却的救 ...

  9. [poj3740]Easy Finding_状态压缩_dfs

    Easy Finding poj-3470 题目大意:给你一个01矩阵,问能否选出一些行,使得这些行所新组成的01矩阵每列中有且只有1个1. 注释:1<=行数<=16,1<=列数&l ...

  10. js面向对象的理解

    ECMAScript 有两种开发模式:1.函数式(过程化),2.面向对象(OOP).面向对象的语言有一个标志,那就是类的概念,而通过类可以创建任意多个具有相同属性和方法的对象.但是,ECMAScrip ...